看到这样一个问题:有m只猴子,从1开始数到n,第n只猴子退出,如此循环执行下去,直到剩下最后一只猴子,求该猴子的编号?
试着写了一个模拟报数
<?php
/*************************************************************************
> File Name: getMonkeyKing.php
> Author: firmy
> Mail: firmy@foxmail.com
> Created Time: 2013年03月01日 16时11分48秒 CST
************************************************************************/
//猴子选大王的程序。首先输入猴子的数目m,然后输入每次查猴子的数目n。每数N次删除一个猴子。最后剩下的是大王。
function getKing($m,$n){
//构造队列
for($i=1;$i<=$m;$i++){
$list[$i] = $i;
}
$j = 1;//设定指针
$k = 1;
while(count($list)>1){
$k = ($k==($n+1))?1:$k;
echo current($list)."=>{$k}\n";
if(($j%$n) == 0){
echo "===========throw {$list[$j]} out,next================\n";
unset($list[$j]);
}else{
array_push($list,$list[$j]);
unset($list[$j]);
}
$j++; //从下一只猴子开始数
$k++;
}
echo "the king is :".current($list).";haha!!!\n";
return $list;
}
$monkeyNum = $argv[1];
$num = $argv[2];
getKing($monkeyNum,$num);
测试一下:
![](http://images0.cnblogs.com/blog/363994/201303/02113837-a532a4d9f30341dd9eb7db3aecd88287.jpg)