题目要求: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]; }