問題:
給定一個函數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;
}
}
