问题 : 寻找组合
题目描述
现在有4个整数,分别为a,b,c,d(位于1-9之间)请在这四个数之间填上+-*/(每一步计算的结果都是只取整数部分)使其结果为100。如下的式子便是满足此组合的式子:(注意:计算不论优先级,先计算a和b,再将结果与c运算,最后和d。)
1+3*5*5=100
2+3*4*5=100
3+2*5*4=100
4+6*2*5=100
5+5*5*2=100
6+6*9-8=100
7-2*4*5=100
8+4+8*5=100
9*2*6-8=100
请找出所有的这样的组合,并输出有多少个这样的组合。
1 #include<stdio.h> 2 char str[4]={‘-‘,‘+‘,‘*‘,‘/‘}; 3 int k=0; 4 void fun(int a[],int i,char str1[],int b){ 5 int m; 6 if(i==3){ 7 if(b==100){ 8 k++; 9 printf("%d%c%d%c%d%c%d=%d\n",a[0],str1[0],a[1],str1[1],a[2],str1[2],a[3],b); 10 } 11 return; 12 } 13 for(int n=0;n<4;n++){ 14 m=b; 15 switch(str[n]){ 16 case ‘-‘:m=m-a[i+1],str1[i]=‘-‘;break; 17 case ‘+‘:m=m+a[i+1],str1[i]=‘+‘;break; 18 case ‘*‘:m=m*a[i+1],str1[i]=‘*‘;break; 19 case ‘/‘:m=m/a[i+1],str1[i]=‘/‘;break; 20 } 21 fun(a,i+1,str1,m); 22 } 23 } 24 int main(){ 25 int a[4],i,b; 26 char str1[4]; 27 for(a[0]=1;a[0]<10;a[0]++){ 28 for(a[1]=1;a[1]<10;a[1]++){ 29 for(a[2]=1;a[2]<10;a[2]++){ 30 for(a[3]=1;a[3]<10;a[3]++){ 31 b=a[0]; 32 i=0; 33 fun(a,i,str1,b); 34 } 35 } 36 } 37 } 38 printf("%d",k); 39 }