二十二:寻找组合

Posted 玉汝于成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二十二:寻找组合相关的知识,希望对你有一定的参考价值。

问题 : 寻找组合
题目描述

现在有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 }

 

以上是关于二十二:寻找组合的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV竟然可以这样学!成神之路终将不远(二十二)

(二十二)类与对象 ---- 继承

第二十二章 微观经济学前沿

第二十二章 微观经济学前沿

OpenCV竟然可以这样学!成神之路终将不远(二十二)

Hulu机器学习问题与解答系列 | 二十二:特征工程—结构化数据