Red de conocimiento informático - Conocimiento informático - Ayuda a escribir el programa Joseph Ring en C o C

Ayuda a escribir el programa Joseph Ring en C o C

Descripción del problema (Joseph Ring):

Se sabe que n personas (representadas por los números 1, 2, 3...n respectivamente) están sentadas alrededor de una mesa redonda. Comience a contar desde la persona numerada k, y la persona que cuenta hasta m sale de la cola, la siguiente persona comienza a contar desde 1, y la persona que cuenta hasta m sale de la cola nuevamente; repita este patrón hasta alrededor de la ronda; mesa Toda la gente salió.

¿Es adecuada la descripción del problema?

Los pasos principales para resolver el problema:

1. Crear una lista enlazada circular con n puntos de enlace y nodos sin cabeza

2. de cada denunciante

3. Elimine continuamente los puntos de enlace de la lista vinculada hasta que la lista vinculada esté vacía

c El código del programa es el siguiente, solo como referencia:

#include lt; iostreamgt;

usando el espacio de nombres std;

struct mono {//nodo de lista vinculada

int num; p> mono *siguiente;

};

mono *cabeza, *cola; //Variables globales

void create(int n){//Crear lista enlazada

int i;

mono *p, *q;

p=nuevo mono

p-gt; =1;

p-gt; siguiente=NULL;

cabeza=p;

q=p; =2; ilt;=n;i=i){

p=nuevo mono

p-gt; ; siguiente= p;

q=p;

p-gt; siguiente=NULL

}

cola=q;

tail-gt; next=head;

}

void select(int m, int k){// Determina la posición inicial y el número de secuencia de los círculos

int x=0, h=1;

int num=1

mono *p, *q; p>q= cola;

for(;hlt;k;){

p=q-gt;

q =p;

}//Determina la posición inicial

do{//Determina el orden de los círculos y genera el número de serie y el número de secuencia

p=q-gt ;siguiente;

x=x 1;

if(xm==0){

coutlt;lt;" "lt;lt;numlt;lt ;": "lt;lt;p-gt;numlt;lt;endl;

num ;

q-gt;next=p- gt;siguiente;

eliminar p;

p=NULL

}

else

q= p;

}mientras(q!=q-gt; siguiente);

head=q

}

int principal; (){

int n, m, k;

head=NULL;

coutlt;lt; "Ingrese el número total de personas sentadas juntas: ";

cingt;gt;n;

coutlt;lt;"Por favor, introduzca el valor m de la regla de intervalo:";

cingt;gt; m;

coutlt ;lt; "Ingrese el número de serie de la posición inicial:";

cingt;gt;k

if(kgt; n){

co

utlt;lt;"¡Su entrada es incorrecta! ¡El programa finaliza!"lt;lt;endllt;lt;endl

return

}

else; {

create(n);

coutlt;lt;"Los números de los círculos son: "lt;lt;endllt;lt;endl; coutlt;lt;"Número de secuencia"lt;lt;endllt;lt;endl;

select(m,k);

coutlt;lt;endllt;lt;" El último uno fuera del círculo es "lt;lt;head-gt;numlt;lt;"号";

eliminar encabezado;

coutlt;lt;endllt;lt;endl;

return 0;

}

}

Explicación: Este es un pequeño ejercicio que hice cuando analicé los conceptos básicos de programación. . En ese momento, el código hacía referencia a un ejemplo de Fundamentos de programación (segunda edición) editado por Wu Wenhu y publicado por Tsinghua University Press. Se ha modificado aquí para ajustarse al significado de la pregunta.

Hablando francamente: lo que dijo el primer piso tiene sentido antes de referirse a los programas de otras personas, es mejor escribirlos usted mismo y luego compararlos con otros. Si ha analizado el problema en detalle y aún tiene dificultades, consulte los procedimientos de otras personas. Siento que esto podría ser más gratificante. ¡Esto es lo que hice, jaja!