我是靠谱客的博主 柔弱狗,最近开发中收集的这篇文章主要介绍利用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即是我们想要的结果。

代码如下:

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的随机数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部