枚举:填运算符问题
a b c d e=f:填入运算符,使等式成立。
1 #include<stdio.h> 2 int main() 3 { //定义部分 4 int num[6];//保存操作数 5 int result;//用来保存结果值 6 int j,i[5];//用来保存四个运算符 7 int count=0;//用来保存符合条件的结果个数 8 float left,right;//保存中间结果,必须要定义成浮点型,若是定义成整型,在计算结果的时候会将浮点数自动转换成整数,会使符合条件的结果数增加 9 int sign;//累加运算时的符号 10 char oper[5]={' ','+','-','*','/'};//定义运算符 11 12 //输入部分 13 printf("输入五个数:"); 14 for(j=1;j<=5;j++) 15 scanf("%d",&num[j]); 16 printf("请输入结果值:"); 17 scanf("%d",&result); 18 19 //产生和填入四种运算符 20 for(i[1]=1;i[1]<=4;i[1]++)//i[1]=1,则表示第一个运算符是加号i[1]=1,则表示第一个运算符是减号....i1表示加,i2表示减,i3表示乘,i4表示除。 21 { 22 if(i[1]<=4&&num[2]!=0)//若第一个运算符若不是"/"号,或第二个操作数right不能为0,则执行循环语句 23 { 24 for(i[2]=1;i[2]<=4;i[2]++) 25 { 26 if(i[2]<=4&&num[3]!=0)//若第二个运算符若不是"/"号,或第三个操作数right不能为0,则执行循环语句 27 { 28 for(i[3]=1;i[3]<=4;i[3]++) 29 { 30 if(i[3]<=4&&num[4]!=0)//若第三个运算符若不是"/"号,或第四个操作数right不能为0,则执行循环语句 31 { 32 for(i[4]=1;i[4]<=4;i[4]++) 33 { 34 if(i[4]<=4&&num[5]!=0)//若第四个运算符若不是"/"号,或第五个操作数right不能为0,则执行循环语句 35 { 36 left=0; 37 right=num[1]; 38 sign=1;//符号位 39 for(j=1;j<=4;j++) 40 { 41 switch(oper[i[j]]) 42 { 43 case '+': 44 left=left+sign*right; 45 sign=1; 46 right=num[j+1]; 47 break; 48 case '-': 49 left=left+sign*right; 50 sign=-1; 51 right=num[j+1]; 52 break;//通过sign等于-1实现减法 53 case '*': 54 right=right*num[j+1]; 55 break; 56 case '/': 57 right=right/num[j+1]; 58 break; 59 } 60 }//将四个运算符分别放入等式中 61 if(left+sign*right==result) 62 { 63 count++; 64 printf("%3d: ",count); 65 for(j=1;j<=4;j++) 66 printf("%d%c",num[j],oper[i[j]]); 67 printf("%d=%d\n",num[5],result); 68 } 69 } 70 } 71 } 72 } 73 } 74 } 75 } 76 } 77 if(count==0) 78 printf("没有符合条件的答案!"); 79 return 0; 80 }