Red de conocimiento informático - Computadora portátil - El lenguaje C sale del círculo Nankai 100-57

El lenguaje C sale del círculo Nankai 100-57

Prefacio:

El problema del exterior de un círculo es un problema difícil en el lenguaje C de nivel 3. Muchos candidatos le tienen miedo. Hay dos tipos de preguntas de deformación. Las principales diferencias son las siguientes:

Los requisitos de significado de la pregunta en el sistema de examen por computadora: el número del primer círculo se almacena en p[0] y el número de el segundo círculo se almacena en p[1], el número del enésimo círculo se almacena en p[n-1].

Los requisitos de significado de las preguntas informáticas de Nankai o las preguntas informáticas sin preocupaciones: si la I-ésima persona cuenta y gira en círculos, p [i] se colocará en la I-ésima posición desde la parte inferior de la matriz y el original i +1 al I-ésimo elemento se mueven hacia adelante una posición en secuencia, es decir, el número del primer círculo exterior se almacena en P [n-1] y el número del segundo exterior; El círculo se almacena en p[n-2] hasta que El número del enésimo círculo exterior se almacena en p[0].

En consecuencia, las funciones de datos escritos () en los dos programas también han sufrido los cambios correspondientes:

El rendimiento del sistema del centro de examen es el siguiente:

void WriteDat (void)

{

int i, j = 0;

ARCHIVO * fp

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

for(I = 0;I<= N-1;I++) /*Aquí está el bucle de 0 a N-1*/

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

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

j++;/* j's El El valor se incrementa en 1 para evitar el 0% 10 == 0 en la siguiente declaración condicional para que el primer número se separe en una línea. */

if(j % ​​​​10 == 0) {

printf(" \ n ");

fprintf(fp, " \ n "); ") ;

}

}

fclose(FP);

}

Nankai y Wuyou preguntaron las siguientes preguntas:

void WriteDat(void)

{

int I;

FILE * fp

fp = fopen("jose.out", "w");

for(I = N-1;I>=0;I-)/*Aquí está el bucle de N-1 a 0 */

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

fprintf(fp, " %4d ", p[I]); p> if(i % 10 == 0) {

printf(" \ n "

fprintf(fp, " \ n "); >}

}

fclose(FP);

}

Las siguientes son soluciones a los dos tipos de problemas; consulte a ellos.

********************************************* *** ************************************************* **** ****************

★Tema 57 (tema rodeado por Wuyou ID 109)

Hay n personas sentadas en un círculo, numerando en el sentido de las agujas del reloj de 1 a n, contando desde s persona hasta 1 hasta m personas, contando hasta m personas y luego contando desde la siguiente persona hasta 1 hasta m, y así sucesivamente hasta que todos estén fuera del círculo. Ahora se nos pide que demos la lista de orden de estas n personas en un grupo de 10 personas en orden circular. Los candidatos deben escribir la función Josegh() para implementar la función y llamar a la función WriteDat() para generar el resultado p.

Entrar en ficha José. Afuera

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

(1) Almacene los números de serie de 1 a n personas en la matriz unidimensional p;

(2) Si la I-ésima persona informa el número y lo rodea con un círculo, poner p[i] En la posición I-ésima desde la parte inferior de la matriz, el i+1 original hasta el elemento I-ésimo se mueve hacia adelante una posición en secuencia;

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

Nota: Algunos programas fuente se almacenan en el archivo prog1.c

No cambie el contenido de la función principal () y la función de datos de salida WriteDat ().

# include & ltstdio.h & gt

#Definición número 100

#Definición S 1

#Definición M 10

int p[100], n, s, m;

void WriteDat(void);

void Josegh(void)

{ int i, j, s1, w;

s 1 = s;

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

p [I -1]= I;

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

{ s 1 =(s 1+m-1)%I;

si(s 1 = = 0)s 1 = I;

w = p[s 1-1];

for(j = s 1;j<I ;j++)

p[j-1]= p[j];

p[I-1]= w;

}

}

void main()

{

m = M

n = N

s = S

José GH();

escribir dat();

}

void WriteDat(void)

{

int I;

ARCHIVO * fp

fp = fopen("jose.out "," w ");

for(I = N-1; i & gt= 0; i-) {

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

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

if(i % 10 == 0) {

printf(" \ n ");

fprintf(fp, "\n");

}

}

fclose(FP);

p>

}

*************************************** *** ************************************************* **** **********************

Otra forma de esta pregunta (pregunta de prueba real en computadora)

Sí, n personas se sientan en un círculo, numeradas en el sentido de las agujas del reloj del 1 al n, cuentan del sa al 1 al m, cuentan al m, luego cuentan del 1 al m desde la siguiente persona, y así sucesivamente, hasta que todos estén fuera del círculo. . Ahora debemos dar la lista de orden p de estas n personas en orden circular. Los candidatos deben escribir la función Josegh() para implementar la función y llamar a la función WriteDat() para enviar el número a OUT. Los archivos DAT están organizados en orden circular.

Nota: El número del primer bucle se almacena en p[0], el número del segundo bucle se almacena en p[1], hasta que el número del enésimo bucle se almacena en p [n-1] pulg.

Supongamos n = 100, s = 1, m = 10 para programación.

Nota: Parte del programa fuente se almacena en PROG1. C

No cambie el contenido de la función principal () y la función de datos de salida WriteDat().

# include & ltstdio.h & gt

#Definición número 100

#Definición S 1

#Definición M 10

int p[100], n, s, m;

void WriteDat(void);

void Josegh(void)

{ int i,j,s1,w,q[100];

for(I = 0;i<n;i++)q[I]= 0;

s 1 = s;

for(I = 1;i& lt= n;i++)p[I-1]= I;

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

{ s 1 =(s 1+m-1)%I

si(s 1 = = 0)s 1 = I

w =; p[s 1-1];

for(j = s 1;j<i;j++)p[j-1]= p[j];

p[I-1 ]= w;

}

/*Dado que la solución anterior es almacenar el número de círculos hacia atrás, se utilizan los dos bucles siguientes para invertir los datos en la matriz P para cumplir los requisitos del problema, es decir, el número del primer círculo se almacena en p [0] y el número del segundo círculo se almacena en P [1], hasta que el número de n círculos se almacena en P [ n-65438].

*/

for(i=0,j=n-1;i<n,j>=0;I++,j-)/*también se puede cambiar a for(i=0,j= n-1 ;i<n;i++,j-) */

q[j]= p[I];

for(I = 0;i<n;i++ )

p[I]= q[I];

}

void main()

{

m = M

n = N

s = S

José GH();

escribe dat();

}

Void WriteDat(void) /*Tenga en cuenta la diferencia entre esta función en las dos preguntas*/

{

int i, j = 0;

ARCHIVO * fp

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

for(I = 0; i & lt= N-1 ; i++) {

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

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

j++;

if(j % ​​​​10 == 0) {

printf(" \ n ");

fprintf(fp, "\n");

}

}

fclose(FP);

}

* ************************************************** * ************************************************* ** *************************

Los resultados del archivo de salida de los dos programas son los mismos, como se muestra a continuación:

10 20 30 40 50 60 70 80 90 100

11 22 33 44 55 66 77 88 99 12

24 36 48 61 73 85 97 9 25 38

52 65 79 93 6 21 37 53 68 83

98 15 31 47 64 82 1 17 35 56

74 92 13 32 54 75 95 18 42 63

87 8 39 62 89 16 45 72 3 29

67 96 28 69 4 43 81 23 59 7

57 5 58 19 78 41 2 84 51 46

34 49 76 94 71 27 91 14 86 26

El examen puede no ser la versión Nankai, sino la última versión.

Se recomienda descargar la versión Amuyi de Nankai Baiwen. Esta es la mejor versión del problema, creo.