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);
}
}
蓝桥杯--搭积木
最新推荐文章于 2022-08-10 19:52:07 发布