问题:
给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。
思路:先扩区间,再取模,即构造大的整数区间,限制整数区间,最后映射整数区间。
rand7
int Rand5() { return rand()%5+1; } int Rand7() { int ret; while(1) { //构造出等概率的范围(1-25) ret = (Rand5()-1)*5 + Rand5(); //舍弃22-25 if(ret >= 22) continue; else return ret%7+1; } }
rand3
int Rand3() { int ret; while(1) { ret = (Rand5()-1)*5 + Rand5(); if(ret>=25) continue; else return ret % 3 + 1; } }