蓝桥杯(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    
			
			请你计算这样的搭法一共有多少种?
			
			请填表示总数目的数字。
			注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

思路:最简单思路,全排列暴力破解(个人见解),将0~9保存到数组,全排列数组, text(int[] array)方法判断,permute(int[] array,int start)方法进行递归全排列,打印出符合条件答案。

package Lqb;

import java.util.Arrays;

public class Text13 {

	static int h=0;
	public static void main(String[] args) {
		int[] array={0,1,2,3,4,5,6,7,8,9};
		permute(array,0);
	}
	//验证
	public static int[] text(int[] array){
		boolean a=array[0]<array[1]&&array[0]<array[2];
		boolean b=array[1]<array[3]&&array[1]<array[4];
		boolean c=array[2]<array[4]&&array[2]<array[5];
		boolean d=array[3]<array[6]&&array[3]<array[7];
		boolean e=array[4]<array[7]&&array[4]<array[8];
		boolean f=array[5]<array[8]&&array[5]<array[9];
		if(a&b&c&d&e&f){
			return array;
		}
		return null;
	}
	//递归排列
	public static void  permute(int[] array,int start){
		if(start==array.length-1&&text(array)!=null){
			System.out.println(++h+" "+Arrays.toString(text(array)));
		}
		for(int i=start;i<array.length;i++){
			swap(array,start,i);
			permute(array,start+1);
			swap(array,start,i);
		}
	}
	//交换
	public static void swap(int[] array,int start,int end){
		int telp=array[start];
		array[start]=array[end];
		array[end]=telp;
	}
}

答案:768 种
答案部分截图

猜你喜欢

转载自blog.csdn.net/qq_42798905/article/details/87520027
今日推荐