蓝桥杯--搭积木

import java.text.DecimalFormat;

/*小明最近喜欢搭数字积木。一共有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 {
	static int num;
	//往往用二维数组把结果打印出来是很难做到的。所以用不用二维数组不是看结果打印,而是看算法需不需要二位数组,
//		这种固定10个数的,用一维数组和枚举法列举出来可以解决
	public static void show(int[] arr){
		System.out.println("   "+arr[0]);
		System.out.println("  "+arr[1]+" "+arr[2]);
		System.out.println(" "+arr[3]+" "+arr[4]+" "+arr[5]);
		System.out.println(arr[6]+" "+arr[7]+" "+arr[8]+" "+arr[9]);
		System.out.println();
	}
	//搭积木规则
	public static void test(int[] arr){
		if(arr[0]>arr[1])return;
		if(arr[0]>arr[2])return;
		if(arr[1]>arr[3])return;
		if(arr[1]>arr[4])return;
		if(arr[2]>arr[4])return;
		if(arr[2]>arr[5])return;
		if(arr[3]>arr[6])return;
		if(arr[3]>arr[7])return;
		if(arr[4]>arr[7])return;
		if(arr[4]>arr[8])return;
		if(arr[5]>arr[8])return;
		if(arr[5]>arr[9])return;
		
		show(arr);
		num++;
		
	}
	
	//采用递归进行全排列的方法
	public static void exchange(int[] arr,int k){
		if(k==arr.length-1){
			test(arr);
			return;
		}
		//全排列
		for(int i=k;i<arr.length;i++){  //递归的出口:i<arr.length
			{int temp=arr[k];
			arr[k]=arr[i];
			arr[i]=temp;}
			exchange(arr,k+1);  //递归的相似性
			{int temp=arr[k];
			arr[k]=arr[i];
			arr[i]=temp;}
		}
	}

	

	public static void main(String[] args) {
	int a[]={0,1,2,3,4,5,6,7,8,9};
		exchange(a,0);
		System.out.println(num);
		
		
		float s=10;
		float d=7;
		float t=s/d;
		DecimalFormat df=new DecimalFormat("0.00");
		String z=df.format(t);
		System.out.println(z);

	}

}

点赞