Red de conocimiento informático - Descarga de software - Escribir análisis de código de 24 puntos en lenguaje c

Escribir análisis de código de 24 puntos en lenguaje c

#includelt; stdio.hgt;

double fun(double a1, double a2, int b) //Función utilizada para probar cálculos, b es control de operación

{

interruptor(b)

{

caso 0: retorno (a1 a2);

caso 1: retorno ( a1-a2);

caso 2: devolver (a1*a2);

caso 3: devolver (a1/a2); >

}

void main()

{

int i, j, k, l, n, m, r, guardar[ 4]

doble número[4]={1, 1, 1, 1}, tem1, tem2, tem3, abc=1111

signo de carácter[5]=" -* /"; //Los símbolos utilizados al imprimir deben ser consistentes con el orden en la función divertida

printf("ingrese 4 números:");

for(i= 0 ;ilt;4;i)

{

scanf("lf",num i); //Datos de entrada

save[i]=num [ i]; //Guardar los datos originales

}

//La idea del siguiente programa es utilizar el agotamiento (en realidad, el método de permutación y combinación utilizado) para calcular posibles combinaciones.

//Primero organice los cuatro números de entrada (los primeros cuatro para declaraciones se utilizan para este propósito)

//Luego inserte tres operadores en secuencia (los últimos tres para declaraciones son Para este propósito)

//De hecho, desde aquí, este programa no es muy bueno. Siete niveles de anidamiento de bucles son un tabú en la programación. Generalmente, es mejor no tener más de dos niveles de anidamiento de bucles.

for(i=0;ilt;4;i)

for(j=0;jlt;4;j)

if(j!= i)

{

for(k=0;klt;4;k)

if(k!=iamp;amp;k!=j)

{

for(l=0;llt;4;l)

if(l!=iamp;amp;l!=jamp;amp; l!=k)

{

for(n=0;nlt;4;n)

for(m=0;mlt;4;m )

for(r=0; rlt; 4; r )

{

tem1=fun(num[i], num[j], n

tem2=diversión(tem1, número[k], m);

tem3=diversión(tem2, número[l], r); >//Los siguientes cinco métodos de procesamiento cubren todas las secuencias de operación posibles

//Esta es también la parte más sutil de este programa.

if(tem3==24.0)//Si 24 se calcula directamente, significa que el orden permanece sin cambios y la salida directa es

printf("{(dcd)cd }cd=24\ n", guardar[i], firmar[n], guardar[j], firmar[m], guardar[k], firmar[r], guardar[l]);

else if(tem3 ==-24.0)//Si el resultado calculado es negativo, significa que la segunda operación debe revertirse (la tercera operación no puede ser suma ni resta)

printf("{ dc(dcd)}cd= 24\n", guardar[k], firmar[m], guardar[i], firmar[n], guardar[j], firmar[r], guardar[l]);

else if (tem3==1.0/24.0)//Si es recíproco, significa que la última operación debe revertirse (la tercera operación no puede ser suma ni resta)

printf("dc{(dcd)cd}= 24\n", guardar[l], firmar[r], guardar[i], firmar[n], guardar[j], firmar[m], guardar[k] );

else if (tem3==-1.0/24.0)//Si es un recíproco negativo, significa que la segunda y tercera operación deben invertirse (la tercera operación tampoco puede ser suma o resta). )

printf ("dc{dc(dcd)}=24\n", guardar[l], firmar[r], guardar[k], firmar[n], guardar[i], firmar [m], guardar[j])

else

{ //Procesando ()*/ /-()

tem1=fun(num[ i], num[j] , n);

tem2=fun(num[k], num[l], r);

tem3=fun(tem1, tem2, m);

if(tem3==24.0)

printf("(dcd)c(dcd)=24\n", guardar[i], firmar[n], guardar[j], firmar[ m], guardar[k], firmar[r], guardar[l]

}

}

}

}

}

}

//Después de investigar más, descubrí que la idea de que "la tercera vez no puede ser una suma" o resta" está mal. , y el autor del programa sí lo pensó al diseñarlo, por lo que hay un problema con este programa.

//Pero no hay ningún problema con la idea principal del programa. Si esto El error debe corregirse, el programa Necesitamos trabajar duro para juzgar el orden de las operaciones. El resultado solo se puede tomar como == 24.