1、题目:
现有 n 只猴子围坐成一个圈,按顺时针方向从1到n编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,继续从刚出局猴子的下一个位置重新从1开始报数,报到m猴子出局。如此循环重复,直至剩下一个猴子,它就是大王。
2、算法:
思路:利用数组队列, m 的直接从数组去除,不是 m 的排到数组队列的最后面,然后删除其在原数组中的位置;
function findMonkeyKing($n,$m){
$monkeys = range(1, $n);
$i = 0;
while (count($monkeys) > 1){
if (($i+1)%$m == 0) {
unset($monkeys[$i]);
}else{
array_push($monkeys, $monkeys[$i]);
unset($monkeys[$i]);
}
$i++;
}
return current($monkeys);
}
/*假设现在100只猴子,数到7的出局;
echo findMonkeyKing(100,7);
运行结果为:50