二十二:寻找组合

问题 : 寻找组合
题目描述

现在有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
",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 }
原文地址:https://www.cnblogs.com/yuming226/p/8150874.html