慕勒3428872
这相当于AdamRosenfield的解决方案,但对一些读者来说可能更清楚一些。它假定RANRAN 5()是一个函数,它在1到5的范围内返回一个统计上的随机整数。int rand7()
{
int vals[5][5] = {
{ 1, 2, 3, 4, 5 },
{ 6, 7, 1, 2, 3 },
{ 4, 5, 6, 7, 1 },
{ 2, 3, 4, 5, 6 },
{ 7, 0, 0, 0, 0 }
};
int result = 0;
while (result == 0)
{
int i = rand5();
int j = rand5();
result = vals[i-1][j-1];
}
return result;
}它怎麽工作?想想看:想象一下,在纸上打印出这个二维数组,把它贴在一个飞镖板上,然后随机地向它扔飞镖。如果你碰到一个非零值,它是一个统计上的随机值,介于1到7之间,因为有相同数量的非零值可供选择。如果你击中了一个零,继续扔飞镖直到你击中一个非零。这就是这段代码所做的:i和j索引随机地在省道板上选择一个位置,如果我们得不到好的结果,我们就继续扔飞镖。就像亚当说的,在最坏的情况下,这种情况可能会永远持续下去,但从统计学上说,最坏的情况*)