有 m 个猴子,从任一个开始数,数到第 n 个把这第 n 个捉出,然后再从下一个开始数,数到第 n 个 捉出
最后一个猴子是?
echo getLastOne(11, 9);
function getLastOne($m, $n, $arr = array())
{
if($n == 0 || $m < 1) {
return false;
}
if($n > $m) {
$key = ($n - 1) % $m;
} else {
$key = $n - 1;
}
if(empty($arr)) {
$arr = range(1, $m);
} else {
$arr = array_values($arr);
}
$m = count($arr);
if($m == 1) {
$lastone = $arr[0];
} else {
//提出第n个猴
unset($arr[$key]);
//从下一个数起
$newarr = array();
foreach ($arr as $k => $v)
{
if($k < $key) {
$newarr[] = $v;
unset($arr[$k]);
} else {
break;
}
}
$arr = array_merge($arr, $newarr);
$m--;
$lastone = getLastOne($m, $n, $arr);
}
return $lastone;
}