谷歌面试题:给定能随机生成整数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

也是可以参考的。

目录
相关文章
|
4月前
|
C++
C++产生N以内的随机整数
C++产生N以内的随机整数
19 0
|
7月前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
|
7月前
|
存储
leetcode:415. 字符串相加(模拟竖式计算)
leetcode:415. 字符串相加(模拟竖式计算)
67 0
|
存储 算法 JavaScript
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
|
Java
猜测1-100的随机整数
猜测1-100的随机整数
122 0
|
C++
C++ 计算斐波那契数列第100万项的精确整数值
C++ 计算斐波那契数列第100万项的精确整数值
112 0
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
|
Java
Java经典编程习题100例:第14例:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值, 最小值,平均值,和值,并输出出来
Java经典编程习题100例:第14例:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值, 最小值,平均值,和值,并输出出来
341 0