面试时遇到由rand5生成rand7

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

例如,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次,概率相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值