标题:纸牌三角形
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。
A
9 6
4 8
3 7 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
注意:需要提交的是一个整数,不要提交任何多余内容。
思路:生成数字的排列组合,判断三角形的三条边是否相等。由于反转镜像后的结果都算同一种,所以最终结果/6即可
public class Test {
static int[] a = new int[10];
static int[] num = new int[10];
static int sum = 0;
public static boolean check() {
if (a[1] + a[2] + a[4] + a[6] == a[6] + a[7] + a[8] + a[9]
&& a[1] + a[2] + a[4] + a[6] == a[1] + a[3] + a[5] + a[9]) {
return true;
}
return false;
}
public static void DFS(int n) {
if (n == 10) {
if (check()) {
sum++;
}
return;
}
for (int i = 1; i < 10; i++) {
if (num[i] == 0) {
num[i] = 1;
a[n] = i;
DFS(n + 1);
num[i] = 0;
}
}
}
public static void main(String[] args) {
DFS(1);
System.out.println(sum / 6);
}
}