El método C se necesita con urgencia. ¡Gracias!
Deben cumplir con sus requisitos
Joseph Ring:
Una descripción del problema de Joseph Ring es: Numerado 1.2.3..... ..n n personas forman un círculo en el sentido de las agujas del reloj,
Cada persona tiene una contraseña (entero positivo). Cada persona tiene una contraseña (un número entero positivo) y comienza eligiendo un número entero arbitrario como límite superior del número que se informará, comenzando con la primera
persona y reportando los números en el sentido de las agujas del reloj comenzando desde 1. , deje de informar cuando el informe llegue a m. La persona que informó m está fuera y su contraseña se utiliza como el nuevo valor m. La siguiente persona a partir de él comienza nuevamente desde 1 en el sentido de las agujas del reloj, y así sucesivamente, hasta que todos estén fuera. Intente diseñar un programa para implementarlo.
Requisito: utilizar una estructura de almacenamiento de lista enlazada circular para simular este proceso e imprimir el número de cada persona en el orden indicado.
Datos de prueba: El valor de m es inicialmente 20: contraseña 3, 1, 7, 2, 4, 8, 4.
Resultados correctos: 6, 1, 4, 7, 2, 3, 5.
Consejo: Cuando se ejecuta el programa, primero se le pide al usuario que especifique un límite superior inicial para el número de informes. Luego lea la contraseña de todos. Sea
n<30.
nodo de estructura typedef
{
int num,código;
nodo de estructura *siguiente; lnodo;
void main()
{
int i,j,key,n
lnodo * p,*s,*head;
head=(lnode *)malloc(sizeof(lnode)); /*Asignar espacio para el nodo principal*/
p=head;
printf("Por favor ingrese el número de la persona. "); /*Ingrese el número total de personas: "); /*Ingrese el número total de personas*/
scanf("%d" ,&n);
for(i=1;i<=n;i++)
{
printf ("Persona %d" ,i);
printf(" código: ");
scanf("%d",&key); /p>
s=p;
p=(lnode *)malloc( sizeof(lnode)); /*Crear un nuevo nodo*/
s->siguiente =p;
p>p->núm=i;
p->código=clave
}
p-; >siguiente=cabeza->siguiente ;
p=cabeza;
cabeza=cabeza->siguiente
libre
p=cabeza
hacer
{
printf("\nPersona%d Código: %d",p->num,p-& >code);/*salida de lista enlazada*/
p=p->next;
} while(p!=head
printf( "/nPor favor ingrese su primera clave:"); /*Ingrese el primer número*/
scanf("%d ",&key
do
{
j=1; /*j es un número mnemotécnico*/
p=head
while(j { s=p; p=p->siguiente p. p.} p> i=p->num; key=p->code; printf("\nLa salida del número: printf( "Persona%d",i); s->.next=p->siguiente head=p->siguiente /*Redefinir cabeza , que es el siguiente El nodo inicial del ciclo*/ free(p); n-- /*Cada vez que se repite el ciclo, el número de personas disminuye. por 1 */ } while (n> 0 getch(); } Aquí hay otro que se dice que es correcto contigo Más relevantes Temas: Numerados 1, 2, 3......n n personas forman un círculo, numerado desde La k persona comienza a contar y sale la enésima persona. Luego comience a contar desde la siguiente persona que sale de la cola e informe la enésima persona que sale de la cola, hasta que todas las personas salgan de la cola, encuentre el orden en que estas n personas salen de la cola. Escriba el algoritmo en lenguaje C y genere los resultados como una lista de secuencia y una lista enlazada individualmente Pregunta complementaria: ¡Atención! ¡No hay "ingresar contraseña" en esta pregunta de Joseph! Mejor respuesta #include #include typedef estructura por p> { long n; estructura por *siguiente } void; createcircle(s * *cabeza) { s *p=*cabeza,*cola long i,sum printf(" Ingrese la suma:\n"); scanf("%ld",&sum)for(i=1;i<=sum;i++) { p=(s*)malloc(tamañode(s)); p->n=i p-> siguiente =NULL; if(*head==NULL) { *head=p cola; =p; } else { cola->siguiente=p cola = p; cola =p; cola->siguiente=p; p> } } cola- >next=*head; } void countcircle(s *head ) { long i,len s *p=head,*q; printf("Ingrese el incremento :\n"); scanf("%ld",&len); printf("Ingrese el inicio:\n"); scanf ("%d",&i); while(p->next!=p) { p=p->siguiente; i++ if(i%(len-1)==0) { printf("%6ld\n",p->n); q=p- >siguiente p->siguiente=q->siguiente; > gratis (q); } } p> } } // printf("El número de la persona restante es:%ld\n",p->n } void main () { s *head=NULL; createcircle(&head); countcircle(cabeza); >}