PHP算法之猴子选大王的游戏
猴子选大王游戏
一群猴子排成一圈.按1,2,...,n依次排号.
然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数.
再数到第m只,把它踢出去..如此不停的进行下去.
直到最后只剩下一只猴子为止,那只猴子就叫大王.
要求编程模拟此过程,输入m,n. 输出最后那个大王的编号.
复制代码
一群猴子排成一圈.按1,2,...,n依次排号.
然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数.
再数到第m只,把它踢出去..如此不停的进行下去.
直到最后只剩下一只猴子为止,那只猴子就叫大王.
要求编程模拟此过程,输入m,n. 输出最后那个大王的编号.
- function monkeyKing($n, $m) {
- $monkeys = range(1, $n);
- $i = 0; // 取出时候的坐标
- $z = 0; // 数到M的时候停
- while(($mNum = count($monkeys)) > 1) {
- if($i == $mNum) {
- $i = 0; // 圈
- }
- $z++;
- $i++;
- if($z == $m) {
- array_splice($monkeys, --$i, 1);
- $z = 0; // 归零
- }
- }
- return($monkeys[0]);
- }
作者: howk 发布时间: 2011-06-15
/*
* @param $n 总数
* @param $m 当报数到 m 时,m出列
* @return 最后剩下的数字
*/
function yuesefu($n,$m) {
$r=0;
for($i=2; $i<=$n; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(yuesefu(3,3));
?>
* @param $n 总数
* @param $m 当报数到 m 时,m出列
* @return 最后剩下的数字
*/
function yuesefu($n,$m) {
$r=0;
for($i=2; $i<=$n; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(yuesefu(3,3));
?>
作者: teng19820 发布时间: 2011-06-15