题目
答案
#include<stdio.h>
float operation(float a,float b,char c)
{
switch(c)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int number(float a[],char c[])
{
float temp1=0,temp2=0,sum=0;
int i,j,k,l;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(l=0;l<4;l++)
{
if(i!=j&&i!=k&&i!=l&&j!=k&&j!=l&&k!=l)
{
temp1=operation(a[i],a[j],c[0]);
temp2=operation(temp1,a[k],c[1]);
sum=operation(temp2,a[l],c[2]);
if(sum==24)
{
printf("((%.0f%c%.0f)%c%.0f)%c%.0f",a[i],c[0],a[j],c[1],a[k],c[2],a[l]);
return 1;
}//((1 2) 3) 4
temp1=operation(a[j],a[k],c[1]);
temp2=operation(a[i],temp1,c[0]);
sum=operation(temp2,a[l],c[2]);
if(sum==24)
{
printf("(%.0f%c(%.0f%c%.0f))%c%.0f",a[i],c[0],a[j],c[1],a[k],c[2],a[l]);
return 1;
}//(1 (2 3)) 4
temp1=operation(a[i],a[j],c[0]);
temp2=operation(a[k],a[l],c[2]);
sum=operation(temp1,temp2,c[1]);
if(sum==24)
{
printf("(%.0f%c%.0f)%c(%.0f%c%.0f)",a[i],c[0],a[j],c[1],a[k],c[2],a[l]);
return 1;
}//(1 2)(3 4)
temp1=operation(a[j],a[k],c[1]);
temp2=operation(temp1,a[l],c[2]);
sum=operation(a[i],temp2,c[0]);
if(sum==24)
{
printf("%.0f%c((%.0f%c%.0f)%c%.0f)",a[i],c[0],a[j],c[1],a[k],c[2],a[l]);
return 1;
}//1 ((2 3) 4)
temp1=operation(a[k],a[l],c[2]);
temp2=operation(a[j],temp1,c[1]);
sum=operation(a[i],temp2,c[0]);
if(sum==24)
{
printf("%.0f%c(%.0f%c(%.0f%c%.0f))",a[i],c[0],a[j],c[1],a[k],c[2],a[l]);
return 1;
}//1 (2 (3 4))
}
}
return 0;
}
int main()
{
float num[4]={0};
int i,j,k,l=0;
for(i=0;i<4;i++)
scanf("%f",&num[i]);
char a[6]="+-*/";
char icon[64][5]={0};
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
{
icon[l][0]=a[i];
icon[l][1]=a[j];
icon[l][2]=a[k];
l++;
}
for(i=0;i<64;i++)
if(number(num,icon[i])) return 0;
printf("-1");
}
注意
不要像我一样,把!=写成了=!,因为这事儿我找了2个小时的bug,呜呜呜