题目要求:n只猴子围成一圈,然后从其中某只猴子开始计数,数到第m只的时候把它离场,循环这个过程到最后剩下一只猴子,它就是大王了。
以为下是靠自己理解编写的php源码,算法肯定不是最优,便于自己理解:
echo getMonkeyKing(4,10);
function getMonkeyKing($m,$n){
$arr = range(1,$n);
print_r($arr);
$s_m = $m;//记录开始选猴步数
$n=count($arr);
//$j=0;
while($n>1){//最后剩下一只猴子
echo "***".$arr[$m-1];//离场的猴子
for($i=$m;$i<$n;$i++){
$arr[$i-1]=$arr[$i];//选到猴子后所有数组向前移动一步
}
unset($arr[$n-1]);//删除最后空余的数组
$n=count($arr);//重新计算剩下的猴子总数
$m=$m+$s_m-1;//重新计算选猴的位置
if($m>$n){
$m=$m%$n;////选猴位置大于总数时需从头选,用求余计算位置
}
if($m<=0){//重新计算位置出现负数为倒数的情况
$m=$m+$n;
}
//$j++;
//print_r($arr);
//if($j==20) exit;
}
return $arr[0];
}

