蓝桥杯-搭积木-java

时间:2022-06-20 03:14:55

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生

* All rights reserved.

* 文件名称: 蓝桥杯赛题

* 作    者:   彭俊豪

* 完成日期:   2016   年 04月 01日

* 版 本 号:      001

* 对任务及求解方法的描述部分

* 问题描述:

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

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

下面是两种合格的搭法:

0
1 2
3 4 5
6 7 8 9

0
3 1
7 5 2
9 8 6 4

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

* 程序输出:  请填表示总数目的数字。

* 程序头部的注释结束

*/

上代码:

public class Main {

  public static void main(String[] args) {
    int count=0;

    for(int i=0;i<10;i++){
      for(int j=1;j<10;j++){
        for(int k=1;k<10;k++){
          for(int l=1;l<10;l++){
            for(int m=1;m<10;m++){
              for(int n=1;n<10;n++){
                for(int o=1;o<10;o++){
                  for(int p=1;p<10;p++){
                    for(int q=1;q<10;q++){
                      for(int r=1;r<10;r++){
                        int arr[] = new int[]{i,j,k,l,m,n,o,p,q,r};
                        if(panDuan(arr)==1){
                          if (i<j&&i<k&&j<l&&j<m&&k<m&&k<n&&l<o&&l<p&&m<p&&m<q&&n<q&&n<r) {
                            System.out.println(i+" "+j+" "+k+" "+l+" "+m+" "+n+" "+o+" "+p+" "+q+" "+r);
                            count++;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    System.out.println(count);
  }

  public static int panDuan(int[] arr){
    for(int i=0;i<arr.length-1;i++){
      for(int j=i+1;j<arr.length;j++){
        if(arr[i]==arr[j]){
          return 0;
        }
      }
    }
    return 1;
  }

}