我是靠谱客的博主 柔弱狗,这篇文章主要介绍利用1到7的随机数,产生一个1到10的随机数,现在分享给大家,希望可以做个参考。

这是我面试百度实习二面遇到的算法题,很可惜,我没做出来。。。。

不过既然没有做出来,岂能善罢甘休!面试完通过思考,查询,终于把这题整出来了,也算是圆了一个小遗憾吧。

利用 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即是我们想要的结果。

代码如下:

复制代码
1
2
3
4
5
6
7
8
9
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部