该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* HELLO.C -- Hello, world */ #include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"
#include "ctype.h"
int JS(int a,int b,int c) /*两数计算*/
{if(c==0) return a+b;
if(c==1) return a-b;
if(c==2) return a*b;
else if(b==0||a%b!=0) return -9999;
else return a/b; }
char FH(int a) /*打印符号*/
{if(a==0) return '+';
else if(a==1) return '-';
else if(a==2) return '*';
else return '/';}
int main()
{int a[4],b[4],c[4],d[4];
int n;
int sum1,sum2,sum3,sum; printf("输入4个数\n");
for(n=0;n<=3;n++)
scanf("%d",&a[n]); for(c[0]=0;c[0]<=3;c[0]++)
{for(c[1]=0;c[1]<=3;c[1]++)
{if(c[1]==c[0]) continue;
for(c[2]=0;c[2]<=3;c[2]++)
{if(c[2]==c[1]||c[2]==c[0]) continue;
c[3]=6-c[2]-c[1]-c[0];
if(c[3]==c[2]||c[3]==c[1]||c[3]==c[0]) continue;
for(n=0;n<=3;n++)
b[n]=a[c[n]]; /*从上面到到本句为交换4个数的输入顺序*/
for(n=0;n<=255;n++)
/*在不考虑分数的情况,4种括号,3个计算符,所以总得有256可能*/
/*考虑分数的话8种括号都需要算吧,但那样重复的太多了,先写简单的吧*/
{d[0]=(n&3)/1;d[1]=(n&12)/4;d[2]=(n&48)/16;d[3]=(n&192)/64;
/*d[0]为括号 d[1],d[2],d[3] 分别为第1,2,3个计算符号*/
if(d[0]==0){if((d[2]<=1)&&(d[3]>=2)) ;
/*只计算(a+b)*c*d这样第2符号优先级不低于第3符号式子*/
/*第3符号比第2个高的由其他式子计算*/
else {sum1=JS(b[0],b[1],d[1]);
sum2=JS(sum1,b[2],d[2]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24)
printf("(%d%c%d)%c%d%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
}
}
if(d[0]==1){if((d[1]<=1)&&(d[2]>=2)) ;
/*只计算(a+b+c)*d这样第1符号和第2符号优先级相同的算法*/
/*第2符号比第1符号优先的式子由其他式子计算*/
else
{sum1=JS(b[0],b[1],d[1]);
sum2=JS(sum1,b[2],d[2]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24.0)
printf("(%d%c%d%c%d)%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
}
}
if(d[0]==2){ /*没啥讲的,3步计算都固定死了,就是与其他式子重复的多了*/
sum1=JS(b[1],b[2],d[2]);
sum2=JS(b[0],sum1,d[1]);
sum3=JS(sum2,b[3],d[3]);
if(sum3==24)
printf("(%d%c(%d%c%d))%c%d=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
}
if(d[0]==3){if((d[2]>=2&&(d[1]>=2||d[3]>=2))||(d[2]<=1&&(d[1]<=1||d[3]<=1)));
/*也是3步都固定死的,第1或者第3的优先级与第2的相同的话可以转换成第1或者第2个式子或者无解,所以不计算*/
else {sum1=JS(b[0],b[1],d[1]);
sum2=JS(b[2],b[3],d[3]);
sum3=JS(sum1,sum2,d[2]);
if(sum3==24)
printf("(%d%c%d)%c(%d%c%d)=24\n",b[0],FH(d[1]),b[1],FH(d[2]),b[2],FH(d[3]),b[3]);
}
}
} }
}
} getch();
return 0;
}