// 输入m,n. 本程序用6和4来举个例子
$n = 6;
$m = 4;
$monkeys = array();
for($i=1; $i<=$n; $i++){ //按1,2,...,n依次编号
$monkeys[] = $i;
}
echo '<pre>';
echo "start:";
print_r($monkeys); //输出初始状态
$i = 0; //数组下标
$z = 0; //数数的变量
$c = $n; //用来记录还剩下的猴子个数
while($c>1){ //只要剩下的猴子还多余一个,就继续循环
if($i == $n){
$i = 0; //如果下标跑到头,就回0;用这个方法来模拟不停转圈。
}
if($monkeys[$i] != null){ //跳过之前已经踢出去的猴子
$z++; // 往下数
if($z == $m){ //如果数到了m
$monkeys[$i] = null; //数到第m只,把它踢出圈
$c--; //猴子数量减1
$z = 0; //重新再数
echo "temp:";
print_r($monkeys); //这里去掉注释可以输出中间过程,看清踢出的顺序
} }
$i++; //下标往下走
}//while
echo "final:";
print_r($monkeys);//打印最后结果
echo '</pre>';