[Problema de lenguaje C][Expertos, por favor vengan] 12345 ¿Cómo pasar - × ÷ para obtener 22?
Lo escribí:
#include "iostream.h"
#include "math.h"
# include lt ; stringgt;
usando el espacio de nombres std;
doble número[5];
cadena exps[5]; doble d, int p)
{
doble *dp, d1;
dp=nuevo doble;
d= d* pow(10,p);
d1=modf(d,dp);
d1gt;=0.5?d=(*dp 1)/pow(10,p ): d=*dp/pow(10, p);
eliminar dp;
return d; n)
{
int i, j; doble a, b; cadena como, bs
if (n==1) p>
{
if(round(num[0], 4)==22)
{
coutlt;lt;exps[0 ]. c_str()lt;lt;endl;
devuelve falso;
}
devuelve falso;
}
para(i=0;ilt;n;i){
para(j=0;jlt;n;j){
si(i==j )continuar
a=núm[i];
b=núm[j]
núm[j]=núm[n-1]; p>
as=exps[i];
bs=exps[j];
exps[j]=exps[n-1]; p> if(i!=n-1){num[i]=a b;exps[i]=string("(") as (string)" " bs (string)"";}else {num [j ]=a b;exps[j]=string("(") as (string)" " bs string(")");}
if(is22(n-1))return true;
if(i!=n-1){num[i]=a-b; exps[i]=string("(") as (string)"-" bs string(")") ;} else {num[j]=b-a;exps[j]=string("(") as (string)"-" bs string(")");}
if(is22(n -1 ))devuelve verdadero;
if(i!=n-1){num[i]=a*b;exps[i]=as (string)"*" bs;}else { num[ j]=a*b;exps[j]=as (string)"*" bs;}
if(is22(n-1))return true;
if(i!=n-1){num[i]=a/b;exps[i]=as (cadena)"/" bs;}else {num[j]=a/b;exps[ j]=as (cadena)"/" bs;}
if(is22(n-1))return true;
num[i]=a;
num[j]=b;
exps[i]=as;
exps[j]=bs
}
}
devuelve falso;
}
void main()
{
num[ 0]=1, núm[1]=2, núm[2]=3, núm[3]=4, núm[4]=5;
exps[0]="1", exps [1]="2", exps[2]="3", exps[3]="4", exps[4]="5"
es22(5); >
}
Las expresiones generadas pesan más de 40 KB, las publicaré aleatoriamente
(((1 2)*5 4) 3)
(3 ((1 2)*5 4))
(((1 2)*5 3) 4)
(4 ((1 2)*5 3 ))
(3 (4 (1 2)*5))
((4 (1 2)*5) 3)
(( 1 2)*5 (4 3))
((4 3) (1 2)*5)
((3 (1 2)*5) 4) p >
(4 (3 (1 2)*5))
((1 2)*5 (3 4))
((3 4) (1 2 )*5)
(((1 2) 4) 5*3)
(5*3 ((1 2) 4))
( ((1 2) 4) 3*5)
(3*5 ((1 2) 4))
((4 5*(1 2)) 3)
(3 (4 5*(1 2)))
((4 3) 5*(1 2))
(5*(1 2) ) (4 3))
(3 (5*(1 2) 4))
((5*(1 2) 4) 3)
(4 (5*(1 2) 3))
((5*(1 2) 3) 4)
((3 4) 5*(1 2 ) )
(5*(1 2) (3 4))
(4 (3 5*(1 2)))
((3 5 *(1 2)) 4)
(((1 2) 5*3) 4)
(4 ((1 2) 5*3))
(((1 2) 4) 5*3)
(5*3 ((1 2) 4))
(4 (5*3 (1 2) )))
((5*3 (1 2)) 4)
((1 2) (5*3 4))
( ( 5*3 4) (1 2))
((4 (1 2)) 5*3)
(5*3 (4 (1 2)))< / p>
((1 2) (4 5*3))
((4 5*3) (1 2))
(((1 2) 4 ) 3*5)
(3*5 ((1 2) 4))
(((1 2)
3*5) 4)
(4 ((1 2) 3*5))
(3*5 (4 (1 2)))
((4 (1 2)) 3*5)
((1 2) (4 3*5))
((4 3*5) (1 2) )
((3*5 (1 2)) 4)
(4 (3*5 (1 2)))
((1 2 ) (3*5 4))
((3*5 4) (1 2))
((1 2)*5 (3 4))
((3 4) (1 2)*5)
((3 4) 5*(1 2))
(5*(1 2) (3 4))
((4 (1 2)) 5*3)
(5*3 (4 (1 2)))
(( 4 (1 2)) 3*5)
(3*5 (4 (1 2)))
((1 2)*5 (4 3)) p>
((4 3) (1 2)*5)
((4 3) 5*(1 2))
(5*(1 2) (4 3))
(((1-2) 3) 5*4)
(5*4 ((1-2) 3))
(((1-2) 3) 4*5)
(4*5 ((1-2) 3))
(4 (5-(1- 2))*3)
((5-(1-2))*3 4)
(4 3*(5-(1-2))) p>
(3*(5-(1-2)) 4)
(((1-2) 5*4) 3)
(3 (( 1-2) 5*4))
(((1-2) 3) 5*4)
(5*4 ((1-2) 3))
(3 (5*4 (1-2)))
((5*4 (1-2)) 3)
((1- 2) (5*4 3))
((5*4 3) (1-2))
((3 (1-2)) 5*4)
(5*4 (3 (1-2)))
((1-2) (3 5*4))
((3 5 *4) (1-2))
(4*5 (3 (1-2)))
((3 (1-2)) 4*5)
((3 (1-2)) 5*4)
(5*4 (3 (1-2)))
(((1 -2) 4*5) 3)
(3 ((1-2) 4*5))
(((1-2) 3) 4*5)
(4*5 ((1-2) 3))
(3 (4*5 (1-2)))
((4* 5 (1-2)) 3)
((1-2) (4*5 3))
((4*5 3) (1-2))
((3 (1-2)) 4*5)
(4*5 (3 (1-2)))
((1- 2) (3 4*5))
((3 4*5) (1-2))
(1*2*5 4*3)
(4*3 1*2*5)
(1*2*5 3*4)
(3*4 1*2*5)
(4*3 5*1*2)
(5*1*2 4*3)
(3*4 5*1*2) p>
(5*1*2
3*4)
4*(5/1*2 3)
(5/1*2 3)*4
4*(3 5 /1*2)
(3 5/1*2)*4
1*2*(5*3-4)
(5* 3-4)*1*2
1*2*(4-5*3)
(4-5*3)*1*2
(1*2*5 3*4)
(3*4 1*2*5)
(3*4 5*1*2)
(5*1*2 3*4)
(1*2*5 4*3)
(4*3 1*2*5)
(4*3 5*1*2)
(5*1*2 4*3)
(1/2*5 3)*4
4*(1/2*5 3)
(3 1/2*5)*4
4*(3 1/2*5) p>
4*(5*1/2 3)
(5*1/2 3)*4
4*(3 5*1/2)
(3 5*1/2)*4
(4*3 5/1/2)
(5/1/2 4*3)
(3*4 5/1/2)
(5/1/2 3*4)
(5*3-4)/1 /2
(4-5*3)/1/2
(3*4 5/1/2)
(5/1/2 3*4)
(4*3 5/1/2)
(5/1/2 4*3)
(((1 3 )-2) 4*5)
(4*5 ((1 3)-2))
(((1 3)-2) 5*4) p>
(5*4 ((1 3)-2))
((1 3)/2 4*5)
(4*5 (1 3 )/2)
((1 3)/2 5*4)
(5*4 (1 3)/2)
((( 1 3) 5)*2 4)
(4 ((1 3) 5)*2)
(4 2*((1 3) 5))
Filtrar también es muy sencillo
Simplemente agregue una oración a la declaración coutlt;lt;exps[0].c_str()lt;lt;endl;
:
if(exps[0].find(" ")!=string::npos amp;amp; exps[0].find("-")!=string::npos amp;amp; exps [0].find("*")!=string::npos amp;amp; exps[0].find("/")!=string::npos)
Los resultados obtenidos son los siguientes: sigue:
(4 3/2)*(5-1)
(5-1)*(4 3/2)
4*( ( 5-1) 3/2)
((5-1) 3/2)*4
(3/2 4)*(5-1)
(5-1)*(3/2 4)
4*(3/2 (5-1))
(3/2 (5-1) ) )*4
4*((5 3/2)-1)
((5 3/2)-1)*4
4 * (5 (3/2-1))
(5 (3/2-1))*4
4*((3/2-1) 5)< / p>
((3/2-1) 5)*4
(3/2
4)*(5-1)
(5-1)*(3/2 4)
(4 3/2)*(5-1)
(5-1)*(4 3/2)