Problema del anillo de Joseph (el mono elige al rey) Versión de PHP
El problema del problema de Joseph a veces se describe como el problema del rey mono, y el título es el siguiente. (La fuente de la pregunta de Joseph se publicará al final)
Un grupo de monos están dispuestos en círculo y numerados secuencialmente según 1, 2, ..., n.
Luego comience a contar desde el 1, cuente hasta el m-ésimo, sáquelo del círculo, comience a contar desde atrás, cuente hasta el m-ésimo y sáquelo..., así sucesivamente hasta el final Hasta allí solo queda un mono, ese mono se llama el rey.
Se requiere programar para simular este proceso, ingresar m, n y generar el número del último rey.
Simula este proceso con un programa, el código es el siguiente:
<?php
function monkeyKing($n, $m)
{
$arr = range(1, $n); //构造一个数组
$i = 1; //从第一个开始循环
while (count($arr) > 1) { //如果总数大于1
if ($i % $m != 0) {
$arr[] = $arr[$i - 1]; //不被踢出则压入数组尾部
}
unset($arr[$i - 1]); //压入数组然后删除
$i++; //继续循环
}
return $arr[$i - 1]; //直至最后剩下一个为大王
}
print_r(monkeyKing(7, 4)); //第4只为大王
El siguiente es el proceso de simulación, para los monos que no se eliminan, la cola de la matriz se agrega continuamente:
$n = 5
$m = 3
$arr = [1, 2, 3, 4, 5]
$i $arr
---+-------------------- ----
1 x 2 3 4 5 1
2 xx 3 4 5 1 2
>3 xxx 4
5 1 2
4 xxxx 5 1 2 4 5 xxxxxx 1 2 4 5
>6 xxxxxx 2 4 5
7 xxxxxxx 4 5 2
8 xxxxxxxx 5 2 4
>9 xxxxxxxxx 2 4
10 xxxxxxxxx 4 2 11
xxxxxxxxxxxx 2 4
>12 xxxxxxxxxxxx 4