思想:一定是等概率的,不然实现都是有问题的
首先:rnad7()->rand5()这个好实现
int rand5()
{
int res=8;
while(res>7)
{
res=rand7();
}
return res;
}
由此我们需要将rand5()生成一个更大的rand()
这里有个小技巧:(rand5()-1)*5
等概率的生成0,5,10,20
(rand5()+1)*5+rand5()
等概率的生成1,2,3,4,5…25
while(res>7)
{
res=(rand5()+1)*5+rand5()
}
由于生成大量的8-25 改进一下
while(res>21)
{
res=(rand5()+1)*5+rand5()
}
return res%7+1;