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