PHP算法之猴子选大王的游戏

猴子选大王游戏
一群猴子排成一圈.按1,2,...,n依次排号.
然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数.
再数到第m只,把它踢出去..如此不停的进行下去.
直到最后只剩下一只猴子为止,那只猴子就叫大王.
要求编程模拟此过程,输入m,n. 输出最后那个大王的编号.
  1. function monkeyKing($n, $m) {
  2.         $monkeys = range(1, $n);
  3.         $i = 0;                // 取出时候的坐标
  4.         $z = 0;                // 数到M的时候停
  5.         while(($mNum = count($monkeys)) > 1) {
  6.                 if($i == $mNum) {
  7.                         $i = 0;                // 圈
  8.                 }
  9.                 $z++;
  10.                 $i++;
  11.                 if($z == $m) {
  12.                         array_splice($monkeys, --$i, 1);
  13.                         $z = 0;                // 归零
  14.                 }
  15.         }
  16.         return($monkeys[0]);
  17. }
复制代码

作者: 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));
?>

作者: teng19820   发布时间: 2011-06-15