Red de conocimientos turísticos - Información de alquiler - Colección completa de 100 ejemplos de programación infantil

Colección completa de 100 ejemplos de programación infantil

Este es el famoso problema de Joseph:

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.

}