现给定一个随机数生成器range2(),可等概率的生成0和1,现如何构造一个随机数生成器range5(),可等概率的生成0,1,2,3,4。
目前有个有点low的想法:
因为现在已有可生成0,1的随机数生成器,任何数均可用二进制表示,用range2()等概率的生成000,001,010,011,100,101,110,111,然后将101,110,111抛弃即可,在生成5,6,7的时候继续调用range5()。
代码如下:
int range5()
{
if(range2())//1,代表首位
{
if(range2())//1,代表中间一位
{
return range5();
}
else //0,中间一位
{
if(range2()) //1
return range5();
else //0,最后一位,100
return 4;
}
}
else{//首位0
if(range2())//中间一位1
{
if(range2())//最后1,011
return 3;
else //010
return 2;
}
else{ //中间一位0
if(range2()) //001
return 1;
else //000
return 0;
}
}
}
如有问题,欢迎指出。