问题:
给定一个函数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;
}
}