zoukankan      html  css  js  c++  java
  • 谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数

    给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。

    我的想法:

    编写一个生成0和1的随机函数:
    step1. 调用给定的随机函数original_rand()生成一个数
    如果==3 goto step1
    如果<3 return 0
    如果>3 return 1
    编写一个生成1到7的随机函数
    调用生成0和1的随机函数3次,构成000或001或010.......
    如果???不等于0返回,否则重新生成。

    int rand_01()
    {
       int r = original_rand();
       if(r == 3) return rand_01();
       if(r < 3) return 0;
       if(r > 3) return 1;
    }
    
    int rand_17()
    {
       int i = 0;
       i += rand_01();
       i += rand_01() << 1;
       i += rand_01() << 2;
       if(i == 0) return rand_17();
       return i;
    }

    有网友提出这种思路:

    产生K个数(k>1) 假定产生的数分别为n1,n2,n3,n4...
    那么定义产生的数为n1-1+(n2-2)*5+(n3-1)*5^2+(n4-1)*5^3........
    于是产生的数位于区间(0,5^k-1)
    然后把5^k分成k等分,产生的数位于哪个等分就是那个产生的随机数(0~6),然后+1即可
    如果位于k等分的余数范围,则重新执行一次上述过程
    不用担心余数问题,当k取3时落到余数范围的概率就已经降低为6/125

    也是可以参考的。

  • 相关阅读:
    Windows 服务的安装(1)
    C#编写window服务,一步一步(1)
    .net 读写记事本文件
    C#中POST数据和接收的几种方式(抛砖引玉)
    Newtonsoft.Json 通过 JObject 读取 json对像 超简单
    Winform读写App.config文件以及重启程序
    WebMatrix之WebMatrix.Data
    C#中方法的参数的四种类型
    zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 zh-cn
    .net C# 图片转Base64 Base64转图片
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2414376.html
Copyright © 2011-2022 走看看