rand5()生成rand7()

来源:互联网 发布:手机淘宝评价中心在哪 编辑:程序博客网 时间:2024/05/04 10:52

思想:一定是等概率的,不然实现都是有问题的
首先: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;

原创粉丝点击