面试时遇到由rand5生成rand7

本文介绍了一种将[1,5]区间内的均匀分布随机数转换为[1,7]区间内均匀分布随机数的方法。通过数学组合的方式,确保了最终生成数字的概率相等。具体实现包括使用rand5生成0到24范围内的随机数,并从中筛选出0到20的数以匹配rand7的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

例如,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、付费专栏及课程。

余额充值