题目:
已知有个函数rand7(),它返回1到7的随机自然数,现利用这个rand7()来构造rand10(),使它返回1到10的随机自然数
以前在网上看到由rand5()来构造rand7()这样的题目,依次类推,此题解法如下(需要保证概率相同):
int rand10()
{
int result;
do
{
result=(rand7()-1)*7+rand7(); //等概率产生1-49的随机自然数
}while(result >10); //如果在1-10之间则推出循环
return result;
}
这段代码可以推广一下,如何由randm()来构造randn()?其中m*m<=n。代码如下:
int randn()
{
int result;
do
{
result=(randm()-1)*m+randm(); //等概率产生1-m*m的随机自然数
}while(result >n); //如果在1-n之间则推出循环
return result;
}