Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 3445 | Accepted: 2065 |
Description
Input
Output
Sample Input
5 5 1 5
Sample Output
5*(5-(1/5))
#include<stdio.h>
double a,b,c,d;
double cal(double n1,int op,double n2)
{
// printf("dd");
if(op==1) return n1+n2;
else if(op==2) return n1-n2;
else if(op==3) return n1*n2;
else if(op==4) return n1/n2;
}
int can(int op1,int op2,int op3,int m)
{
double ans=0.0;
//printf("kao");
if(m==1)
ans=cal(cal(a,op1,b),op2,cal(c,op3,d));//a,b计算后 cd也计算后 二者结果再计算
else if(m==2)
ans=cal(cal(cal(a,op1,b),op2,c),op3,d);
else if(m==3)
ans=cal(cal(a,op1,cal(b,op2,c)),op3,d);
else if(m==4)
ans=cal(a,op1,cal(cal(b,op2,c),op3,d));
else //if(m==5)
ans=cal(a,op1,cal(b,op2,cal(c,op3,d)));
if(ans==24.0) return 1;
return 0;
}
char get(int op)
{
if(op==1) return '+';
else if(op==2) return '-';
else if(op==3) return '*';
else return '/';
}
void print(int op11,int op22,int op33,int m)
{
char op1,op2,op3;
op1=get(op11);
op2=get(op22);
op3=get(op33);
if(m==1) printf("(%.0lf%c%.0lf)%c(%.0lf%c%.0lf)\n",a,op1,b,op2,c,op3,d);
else if(m==2) printf("((%.0lf%c%.0lf)%c%.0lf)%c%.0lf\n",a,op1,b,op2,c,op3,d);
else if(m==3) printf("(%.0lf%c(%.0lf%c%.0lf))%c%.0lf\n",a,op1,b,op2,c,op3,d);
else if(m==4) printf("%.0lf%c((%.0lf%c%.0lf)%c%.0lf)\n",a,op1,b,op2,c,op3,d);
else printf("%.0lf%c(%.0lf%c(%.0lf%c%.0lf))\n",a,op1,b,op2,c,op3,d);
}
int main()
{
int flag,i,j,k,m;
while(scanf("%lf %lf %lf %lf",&a,&b,&c,&d)!=EOF)
{
flag=1;
for(i=1;i<=4&&flag;i++)//暴力4个数字之间的符号
for(j=1;j<=4&&flag;j++)
for(k=1;k<=4&&flag;k++)
for(m=1;m<=5&&flag;m++)//暴力括号的所有情况 因为4个数 顶多有5中计算顺序 所以是5
{
if(can(i,j,k,m))
{
print(i,j,k,m);
flag=0;
}
}
}
return 0;
}