1. 程式人生 > >二十二:尋找組合

二十二:尋找組合

便是 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 }

二十二:尋找組合