概述
这是我面试百度实习二面遇到的算法题,很可惜,我没做出来。。。。
不过既然没有做出来,岂能善罢甘休!面试完通过思考,查询,终于把这题整出来了,也算是圆了一个小遗憾吧。
利用 1到7 的随机数产生一个 1到10的随机数,要求是等概率的。倘若不是等概率就很好做了,直接乘9之后再除以7就可以得到答案了。可是,这样没有达到要求。
我们可以先用1到7的随机数生成器减去1,rand7()-1这样就可以得到一个[0, 6]的随机数生成器,然后乘以7得到一个(0,7,14,21,28,35,42)的随机数生成器,然后都加上[0,6]就可以得到[0,48]的随机数生成器,然后进行对10取余,就可以得到[0,9]的随机数生成器了,但是为了概率相等,但凡生成的数字大于等于40的,都进行重复计算,直到落到[0,39]这个区间为止,最后[0,9]的结果再+1即是我们想要的结果。
代码如下:
int rand10()
{
int a = rand7() - 1; //得到一个[0, 6]的随机数生成器
int b = rand7() - 1; //要背加上的那个随机数生成器
int n = 7*a + b; //得到[0,48]的随机数生成器
if ( n >= 40 ) return rand10(); //生成的数字大于等于40的,都进行重复计算
else return n%10 + 1; //对10取余,然后+1即是答案
}
最后
以上就是柔弱狗为你收集整理的利用1到7的随机数,产生一个1到10的随机数的全部内容,希望文章能够帮你解决利用1到7的随机数,产生一个1到10的随机数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复