面试时遇到由rand5生成rand7

来源:互联网 发布:网络咨询医生兼职招聘 编辑:程序博客网 时间:2024/05/17 01:35

重点是每个数字产生的概率要相同。

例如,rand5生成从1-5,每个数字的概率为0.2

如果只用7个rand5相加来生成的话,概率是两边的数小,中间的数大。

正确产生的方式如下:

num=5*(rand5-1)+rand5-1

if(num<21)

print num%7+1;

其中5*(rand5-1)生成等概率的数0,5,10,15,20,而后面的rand5-1生成等概率的0,1,2,3,4

这样两个数相加,就可以得到等概率的0-24.

这个时候取0-20就可以等概率的区分,rand7的每个数字在这其中出现了3次,概率相等。