一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。提示:约瑟夫环问题。
答案:
<?php
function yuesefu($n,$m)
{
$r=0;
for($i=2; $i<=$n; $i++)
{
$r=($r+$m)%$i;
}
return $r+1;
}
echo(yuesefu(5,3));
?>
想问下为什么可以使用这个方式进行求出最后的胜利者?看到很多比较复杂递归的算法都没有这个简单,所以想找人分析下,谢谢了。
根据约瑟夫环的推导公式
f(n) = x = (f(n-1) + 3) % n
直接套用的,这是个经典问题,百科解释已经很全面了