现给定一个随机数生成器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()) //1return range5();else //0,最后一位,100return 4;}}else{//首位0if(range2())//中间一位1{if(range2())//最后1,011return 3;else //010return 2;}else{ //中间一位0if(range2()) //001return 1;else //000return 0;}}}
如有问题,欢迎指出。
如果觉得《给定一个随机数生成器(0 1) 构造一个随机数生成器(0 4)》对你有帮助,请点赞、收藏,并留下你的观点哦!