搭积木(java)-蓝桥杯

搭积木
小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
      0
    1  2
  3  4  5
6  7  8  9
      0
    3  1
  7  5  2
9  8  6  4
请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

题目类型属于全排列筛选;

模板参见:http://www.cnblogs.com/yang4869/p/8127269.html

public class Demo1 {
    static int count=0;
    public static void main(String[] args) {
        int arr[]=new int[]{0,1,2,3,4,5,6,7,8,9};
        dfs(arr,0,10);
        System.out.println(count);
    }
    private static void dfs(int[] arr, int num, int k) {
        // TODO Auto-generated method stub
        if(num==k){
            if(panDuan(arr)){
                count++;
            }
        }
        for(int i=num;i<arr.length;i++){
            swap(arr,num,i);
            dfs(arr,num+1,k);
            swap(arr,num,i);

        }
    }
    private static void swap(int[] arr, int num, int i) {
        // TODO Auto-generated method stub
        int temp=arr[num];
        arr[num]=arr[i];
        arr[i]=temp;
    }
    private static boolean panDuan(int[] arr) {
        // TODO Auto-generated method stub
        /*   0
            1 2
           3 4 5
          6 7 8 9*/
        if(arr[0]<arr[1]&&arr[0]<arr[2]){
            if(arr[1]<arr[3]&&arr[1]<arr[4]){
                if(arr[2]<arr[4]&&arr[2]<arr[5]){
                    if(arr[3]<arr[6]&&arr[3]<arr[7]){
                        if(arr[4]<arr[7]&&arr[4]<arr[8]){
                            if(arr[5]<arr[8]&&arr[5]<arr[9]){
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }
}

答案:768

错误或者不足的地方欢迎指正!!

最后分享一首喜欢的歌(词):

自废的承诺
           词-曲: 许嵩
爱 曾让我沉迷执着
分手 让我心口影影绰绰
痛 自己说不要想太多
朋友虽多 一句话都懒得说
话 你说得那么洒脱
廉价 收购了我的信任
连风仿佛也在笑我太傻了
吹烂了头发 空气弥漫失落
你自废的承诺
像隔岸的花火
不需对谁负责不需躲避什么
真的没什么不妥
如果离开我 能让你感到好过
也不失为一种不错的选择
倘若我每句话都错
还不如彻底沉默
只希望你拥有幸福的结果

原文地址:https://www.cnblogs.com/yang4869/p/8146025.html

时间: 2024-11-08 18:12:19

搭积木(java)-蓝桥杯的相关文章

【未完待续】Java蓝桥杯--算法训练(1)典型问题的递归框架

预备练习(一) 字母的全排列问题: 1 package package1; 2 3 //对字母进行全排列 4 import java.util.*; 5 6 public class A1 { 7 8 static List f(String s) { 9 List lst = new Vector(); 10 11 // 出口 12 if (s.length() == 1) { 13 lst.add(s); 14 return lst; 15 } 16 17 // 下面是递归的相似性 18 /

java 蓝桥杯算法提高 字串统计

思路:这道题用HashMap来保存枚举的字串,key值保存字串-value值保存字串所出现的次数:         通过for循环并使用subString()方法枚举所有符合要求的子串maxStr记录出现次数最多的字串,          maxValue记录其出现的次数 1截取到的长度大于等于l的子串先比较是否已经存在map里, 1.1若存在,取出它的次数并+1.和最大次数比较 1.1.1若大于最大次数,将这个次数赋给最大次数,并且将子串赋给最大次数的子串 1.1.2若等于最大次数,再判断这两

Java蓝桥杯--基础练习(2)闰年判断

题目: 解决方法: 1 package com.algorithm.java.blueBirdge; 2 3 import java.util.Scanner; 4 5 public class leapYear { 6 public static void main(String[] args){ 7 Scanner read =new Scanner(System.in); 8 int year=read.nextInt(); 9 if(year%4==0 && year%100!=0

Java蓝桥杯--基础练习(3)数列特征

题目: 解决方法: 1 //package com.algorithm.java.blueBirdge; 2 3 //import java.util.Arrays; 4 import java.util.Scanner; 5 6 public class Main { 7 public static void main(String[] args){ 8 Scanner read =new Scanner(System.in); 9 int max=-20000; 10 int min=200

Java蓝桥杯--基础练习 (6)回文数

关键词: 循环 判断 回文数 题目: 解决方法: 1 package com.algorithm.java.blueBirdge; 2 3 //import java.util.Scanner; 4 5 public class Palindrome { 6 public static void main(String[] args){ 7 8 for(int i=1000;i<=9999;i++){ 9 if(i%10==i/1000 && ( ((i%100)/10)==((i/

Java蓝桥杯--算法训练(2)最大最小公倍数

题目: 解决方法: package com.algorithm.java.blueBirdge; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class leastCommonMultiple { public static void main(String[] args){ Scanner read =n

区间K大数查找 Java 蓝桥杯ALGO-1

1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner aScanner = new Scanner(System.in); 7 int n= aScanner.nextInt(); //读第一个 8 long a[] = new long[n]; //存放数组 9 long b[] = n

第五届蓝桥杯全国软件设计大赛--2013年校内选拔赛Java题目

第五届蓝桥杯全国软件设计大赛 2013年校内选拔赛Java题目 一.考生注意: (1)[结果填空题]要求参赛选手根据题目描述直接填写结果.求解方式不限.不要求源代码. 把答案存入[考生文件夹]下对应题号的文件中即可. (2)[代码填空题]要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不超过一条语句(即中间不能出现分号). 把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入[考生文件夹]下对应题号的文件中中即可. (3)[编程题]要求选手设计

算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)

目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 如下的程序,用来建立N行的杨辉三角形.请填写划线部分缺少的代码.