题目
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
过程
利用数组存储边上所有的数字,利用for循环对数组进行赋值,判断数组是否填充完成,填充完对各边的数值进行判断,如果三遍相等,count+1即可.最终输出的结果需要count/6,因为旋转的有3种相同的,镜像的有两种相同的.
代码
代码如下(示例):
public class Triangle {
private static int count = 0;
public static void main(String[] args) {
int arr[] = new int[10];
int last[] = new int[10];
judge(1,arr,last);
//旋转的,镜像 分别需要使结果/3,/2
System.out.println(count/6);
}
public static void judge(int number,int[] arr,int[] last){
//if判断是否赋值完成,复制完后进行三边比较
if (number>9){
int side1 = arr[1]+arr[2]+arr[3]+arr[4];
int side2 = arr[4]+arr[5]+arr[6]+arr[7];
int side3 = arr[7]+arr[8]+arr[9]+arr[1];
if (side1 == side2 && side1 == side3){
count++;
}
return;
}
//利用for循环对数组进行1-9的赋值
for (int i = 1;i<=9;i++){
if (last[i] == 0){
last[i] = 1;
arr[number] = i;
judge(number+1,arr,last);
last[i] = 0;
}
}
}
}
总结
注意要除去旋转和镜像相同的结果.