蓝桥杯-搭积木问题

问题描述:

小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。

搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。

下面是两种合格的搭法:

   0
  1 2
 3 4 5
6 7 8 9

   0
  3 1
 7 5 2
9 8 6 4    

请你计算这样的搭法一共有多少种?

问题分析:

这道题目,其实我没有想到很好的思路,很多人说使用递归方法求解,可是我一直没想出来,因此我才用的是暴力破解,循环了10次,(代码十分丑陋,不忍直视....),直接上代码了。

代码描述:

 1 #include<stdio.h>
 2 int a[11]= {0};
 3 int b[11]= {0,1,2,3,4,5,6,7,8,9}; //每个b[i]分别存放0..9
 4 int count=0;//计数器
 5 int main() {
 6     int d=0,c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,p=0;
 7     for(d=0; d<10; d++) {
 8         a[0]=b[d];
 9         for(c=0; c<10; c++) {
10             a[1]=b[c];
11             for(e=0; e<10; e++) {
12                 a[2]=b[e];
13                 for(f=0; f<10; f++) {
14                     a[3]=b[f];
15                     for(g=0; g<10; g++) {
16                         a[4]=b[g];
17                         for(h=0; h<10; h++) {
18                             a[5]=b[h];
19                             for(i=0; i<10; i++) {
20                                 a[6]=b[i];
21                                 for(j=0; j<10; j++) {
22                                     a[7]=b[j];
23                                     for(k=0; k<10; k++) {
24                                         a[8]=b[k];
25                                         for(p=0; p<10; p++) {
26                                             a[9]=b[p];
27              if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[0]!=a[4]&&a[0]!=a[5]&&a[0]!=a[6]&&a[0]!=a[7]&&a[0]!=a[8]&&a[0]!=a[9])
28                       if(a[1]!=a[2]&&a[1]!=a[3]&&a[1]!=a[4]&&a[1]!=a[5]&&a[1]!=a[6]&&a[1]!=a[7]&&a[1]!=a[8]&&a[1]!=a[9])
29                            if(a[2]!=a[3]&&a[2]!=a[4]&&a[2]!=a[5]&&a[2]!=a[6]&&a[2]!=a[7]&&a[2]!=a[8]&&a[2]!=a[9])
30                                if(a[3]!=a[4]&&a[3]!=a[5]&&a[3]!=a[6]&&a[3]!=a[7]&&a[3]!=a[8]&&a[3]!=a[9])
31                                    if(a[4]!=a[5]&&a[4]!=a[6]&&a[4]!=a[7]&&a[4]!=a[8]&&a[4]!=a[9])
32                                       if(a[5]!=a[6]&&a[5]!=a[7]&&a[5]!=a[8]&&a[5]!=a[9])
33                                          if(a[6]!=a[7]&&a[6]!=a[8]&&a[6]!=a[9])
34                                             if(a[7]!=a[8]&&a[7]!=a[9])
35                                               if(a[8]!=a[9]) {
36                                                    if(a[0]<a[1]&&a[0]<a[2])
37                                                        if(a[1]<a[3]&&a[1]<a[4])
38                                                           if(a[2]<a[4]&&a[2]<a[5])
39                                                            if(a[3]<a[6]&&a[3]<a[7])
40                                                               if(a[4]<a[7]&&a[4]<a[8])
41                                                                 if(a[5]<a[8]&&a[5]<a[9]) {
42                                                                     count++;
43                                                                                                     }
44                                                                             }
45                                         }
46 
47                                     }
48                                 }
49                             }
50                         }
51                     }
52                 }
53             }
54         }
55 
56     }
57 
58 
59 
60 
61 
62 
63 
64 
65 
66     printf("%d",count);
67     return 0;
68 }

 


 结果如下:

 

posted @ 2018-03-16 12:06  Do_Better  阅读(1083)  评论(0编辑  收藏  举报