已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
解答:
int rand10()
{
int x=0;
do{
x=(rand7()-1)*7+rand7();
} while(x>40);
return x%10+1;
}
解释:
x=(rand7()-1)*7+rand7();
这里的x范围是1到49,等概率产生的,都是1/49
1到49之间有1到10,11到20,21到30,31到40,只要%10然后+1,就是等概率的1到10,但是41到49,不够1到10,其实while(x>20);while(x>30);都是对的,就是效率差了点。
另一个观点就是把x=(rand7()-1)*7+rand7() 看成2位的7进制数。