二十二:尋找組合
阿新 • • 發佈:2017-12-30
便是 gpo har ase clas tdi col case log
問題 : 尋找組合
題目描述
現在有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 }
二十二:尋找組合