Colección completa de 100 ejemplos de programación infantil
El problema de Joseph es un problema famoso: n personas forman un círculo, contando desde la primera, la m-ésima persona será asesinada y la última quedará. . Los que caigan también morirán. Por ejemplo, N=6, M=5 y el número de personas asesinadas es 5, 4, 6, 2 y 3. Finalmente queda 1. Supongamos que las primeras k personas del círculo son buenas personas y las últimas k personas son malas. Tu tarea es determinar el mínimo m para que todos los malos puedan morir antes que el primer bueno.
Haz algunos comentarios sobre el programa para que todos los entiendan.
#Definir nmax 50
int main()
{
int i, k, m, n, num[nmax] , * p;
printf("Shu Yi Ru Shu Ge:");
scanf("d ", ampn
p = num
for(I = 0; iltn; i)
*(p I)= I 1; //Generar valores iniciales 1, 2, 3..., n
I = 0;
k = 0;
m = 0;
mientras(m lt; N-1)// cuando hay N -Cuando una persona sale del círculo, el ciclo se detiene y se encuentra la última persona que sale del círculo.
{
if(*(p i)!= 0)k //Comienza a contar. Si la persona con número de serie (i 1) no sale del círculo (es decir, cuando su valor no es 0), cuente.
If(k==3) //La tercera persona sale del círculo y limpia los elementos de su matriz.
{ *(p I)= 0;
k = 0; //Borra el valor del recuento y vuelve a calcular la posición de la tercera persona restante.
m; //Cuenta cuántas personas están fuera del círculo.
}
i; //Mover el desplazamiento del elemento de la matriz un bit hacia atrás - gt *(p i)
if(I = = n) I = 0; //Si el número de secuencia del elemento de la matriz excede el número total actual de personas, el ciclo comienza desde la primera persona.
}
Y (* p = = 0)p; // Encuentra el número de serie de la persona restante, si no es 0, ¡es él!
printf("d queda\n ", * p); // Muestra el resultado. Vale.
}