Rand7实现Rand10
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
解题思路如下:
- rand7() 可生成 1 到 7 范围内的均匀随机整数1,2,3,4,5,6,7.
- rand7()-1 可生成 1 到 7 范围内的均匀随机整数0,1,2,3,4,5,6.
- (rand7()-1)*7 可生成 0,7,14,21,28,35,42这些随机数
- 那么(rand7()-1)*7)+rand7()产生1,2,3,…,49的随机数
- 我们想要产生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