Red de conocimiento informático - Conocimiento del nombre de dominio - El método C se necesita con urgencia. ¡Gracias!

El método C se necesita con urgencia. ¡Gracias!

Las mejores respuestas de otros

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.}

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

p>

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);

}

}

}

}

// printf("El número de la persona restante es:%ld\n",p->n

}

void main ()

{

s *head=NULL;

createcircle(&head);

countcircle(cabeza); >}