题目描述
已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random() 方法。
题解
(rand_Y - 1) * X + rand_X => 可以生成[1, X*Y]的等概率随机数。
在本题中,可生成1-49的随机数,我们可以只取前40个,当数字大于40时,继续产生1-49的随机数,直到小于等于40停止。
在得到1-40的随机数后,对10取余再加1,即可得到1到10范围内的随机数字
代码
class Solution {
public:
int rand10() {
int ans = 0;
do{
ans = (rand7() - 1) * 7 + rand7();
}while(ans > 40);
return ans % 10 + 1;
}
};