pzg's blog

猴王算法

<?php
/*
* filename: kingmonkey.php
* author: jiangang li
* date: April 3th, 2009
* descript: an arithmetic to a program
* program: 
   一群猴子排成一圈,按1,2,…,n依次编号。 
   然后从第1只开始数,数到第m只,把它踢出圈,
   从它后面再开始数,  再数到第m只,在把它踢出去…,
   如此不停的进行下去,  直到最后只剩下一只猴子为止,那只猴子就叫做大王。 
   要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
*/
set_time_limit(1);
function KingMokey($n, $m)
{
        //将1-n只猴子顺序编号 入数组中
  $monkey = range(1,$n);
        //循环遍历数组元素(猴子编号)
  $i=1;
  while(1){
   list($key,$value)=each($monkey);
   if (!$value){
    reset($monkey);
    list($key,$value)=each($monkey);
   }
   if(count($monkey)==1){
    break;
   }
   if ($i%$m == 0){
    unset($monkey[$key]);
   }
   $i = $i % $m + 1;
  }
  return $value;
}
//猴子个数
$n = 10;
//踢出队伍的编号间隔值
$m = 3;
//调用猴王获取函数
print_r(KingMokey($n, $m));
?>

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注