您的位置:首页 > 编程语言 > PHP开发

PHP猴子选大王问题

2012-05-05 00:26 323 查看
问题简介:n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王.

这里使用一个递推公式:

f[i] = 0  i = 1

f[i] = (f[i-1] + m) % i   i >= 2

f[i]表示有i只猴子时,每次剔除m只猴子,最后剩下的大王坐标(坐标从0开始),只有1只猴子时,大王坐标为0,依次递推,即可求得有i只猴子时最后的大王坐标

<html>
<body>
<?php
function monkeyKing($n, $m) {    //$n为猴子总数,$m为剔除猴子步长
$s = 0;    //$s为大王坐标,只有一只猴子时,大王坐标为0
for($i = 2; $i <= $n; $i++) {    //依次向后递推,求到共有$n只猴子,剔除步长为$m时的大王坐标
$s = ($s + $m) % $i;    //大王坐标递推公式
}
return $s;
}

echo monkeyKing(6, 2);
?>
</body>
</html>


页面输出


4

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: