任意等概率随机数转换(用 Rand7实现 Rand10等)

Rand7实现Rand10

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

解题思路如下:

  1. rand7() 可生成 1 到 7 范围内的均匀随机整数1,2,3,4,5,6,7.
  2. rand7()-1 可生成 1 到 7 范围内的均匀随机整数0,1,2,3,4,5,6.
  3. (rand7()-1)*7 可生成 0,7,14,21,28,35,42这些随机数
  4. 那么(rand7()-1)*7)+rand7()产生1,2,3,…,49的随机数
  5. 我们想要产生1-10的随机整数,现在已经产生了1-49的随机数,那么我们如果得到了1-40的随机数,就可以得到我想要的结果了。所以我们将不满足条件的41-49丢弃,就是循环直到满足条件为止。就会出现1-10之间的等概率的随机数。

拓展一下: 只要是给定一个区间上的等概率的随机函数,就可以实现任意区间上的随机函数。如果已知1-m的随机函数,我们进行不断进行累乘,直到范围大于我们想要求的那个数,然后再进行插空就可以了。

c++代码如下:

// The rand7() API is already defined for you.
// int rand7();
// @return a random integer in the range 1 to 7

class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值