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!