Red de conocimiento informático - Computadora portátil - Problema de informes en lenguaje C

Problema de informes en lenguaje C

Supongamos que n personas se sientan en un círculo y numeran de 1 a n en el sentido de las agujas del reloj. A partir de la s-ésima persona, se contará de 1 a m cuando esté la m-ésima persona. contado, esta persona será contada en el círculo, y luego reiniciará el conteo de 1 a m a partir de la siguiente persona, y continuará de esta manera hasta que todos estén fuera del círculo. Ahora debemos dar la lista de orden de estas n personas en cada grupo de 10 personas en el orden de salida del círculo. Se pide a los candidatos que compilen la función Josegh() para implementar esta función y llamen a la función WriteDat() para enviar el resultado p al archivo OUT.DAT.

Supongamos n=100, c=1, m=10.

(1) Almacene los números de serie de los individuos del 1 al n en la matriz unidimensional p;

(2) Si la i-ésima persona abandona el círculo después de informar el recuento, entonces p [i] se coloca en la i-ésima posición desde la parte inferior de la matriz, y el i+1 original a i -ésimo elemento desde abajo se mueve hacia adelante uno por turno. Posición;

(3) Repita el paso (2) hasta que solo quede p[1] en el círculo.

Se ha entregado parte del programa fuente.

No cambie el contenido de la función principal main() y la función de datos de salida writeDat(). #incluir

#definir N 100

#definir S 1

#definir M 10int p[100],n,s,m ;

void WriteDat(void);void Josegh(void)

{}void main()

{

m=M ;

n=N;

s=S;

Josegh();

WriteDat();

}void WriteDat(void)

{

int i;

ARCHIVO *fp;

fp=fopen("fuera .dat" ," w" );

for(i=N-1;i>=0;i--){

printf(" %4d" ,p[ i]);

fprintf(fp," %4d" ,p[i]);

if(i % 10==0){

printf("\n" );

fprintf(fp, "\n" );

}

}

fclose( fp);

}

/* Nota: El primer bucle for() de la pregunta primero asigna un valor inicial a la matriz p. En el segundo for(), i se usa para controlar el número total de personas que no están fuera del círculo. s1=(s1+m-1)%i se usa para averiguar el número de personas que están fuera del círculo. círculo después de informar el número La función de encontrar el resto de i es hacer que los números se informen en círculos (es decir, informar hasta el final y luego comenzar desde el principio). Debido a la función del resto, s1 es 0 cuando el conteo llega al último, por lo que es necesario juzgar si (s1==0). El bucle for() incorporado mueve a las personas después de abandonar el círculo hacia adelante en secuencia. */

void Josegh(void)

{

int i,j,s1,w;

s1=s;

for(i=1;i<=n;i++)

p[i-1]=i;

for(i=n;i> =2;i--)

{s1=(s1+m-1)%i;
si(s1==0)
s1=i;
w=p [s1-1];
for(j=s1;jp[j-1]=p[j];
p[i-1]=w;
}

} Este problema es igual que este, échale un vistazo, debería estar solucionado