Directorio de artículos
Descripción del problema
Los n números 0,1, n-1 están dispuestos en un círculo, comenzando con el número 0 y eliminando el número enésimo de este círculo cada vez. Encuentra el último número que queda en este círculo.
Por ejemplo, los 5 dígitos 0, 1, 2, 3 y 4 forman un círculo, y el tercer dígito se elimina cada vez del dígito 0, luego los primeros 4 dígitos eliminados son 2, 0, 4, 1, y así sucesivamente. El número restante es 3.
Entrada: n = 5, m = 3
Salida: 3
Informe de resolución de problemas.
- El número de n persona es , elimine el número como persona, la siguiente persona eliminada de comienza a contar, la secuencia numérica correspondiente es 。
- Restante Haga un mapeo del número de persona, y mapeelo en , luego en la nueva secuencia es la secuencia original 。
- En otras palabras persona el último número restante es , entonces correspondiente El número de la última persona restante de personas es 。
- Hacer significa número de la última persona que queda, luego 。
Código de implementación
- Recursivo
class Solution {
public:
int f(int n, int m) {
if (n == 1)
return 0;
int x = f(n - 1, m);
return (m + x) % n;
}
int lastRemaining(int n, int m) {
return f(n, m);
}
};
- Iterar
class Solution {
public:
int lastRemaining(int n, int m) {
int ans=0;
for(int i=2;i<=n;i++){
ans=(ans+m)%i;
}
return ans;
}
};