标题:纸牌三角形
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。
A
9 6
4 8
3 7 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
注意:需要提交的是一个整数,不要提交任何多余内容。
分析:
将正三角形的元素位置从上到下标为0-8,用长度为9的一维数组存储1-9九个数字(其中1代表纸牌A),则对数组进行全排列,判断各边之和相等则计数器ans自增,因为旋转、镜像后相同的算同一种,所以算出来的结果除以6才是正确答案。
代码:
public class Main {
static int[] a = {1,2,3,4,5,6,7,8,9};
//static int[] a = {1,2,3};
static int ans;
public static void main(String[] args) {
f(0);
System.out.println(ans);
System.out.println(ans/6);
}
private static void f(int k) {
if (k == a.length) {
if(check()) {
ans++;
}
/* for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();*/
}
for (int i = k; i < a.length; i++) {
{int t = a[i]; a[i] = a[k]; a[k] = t;}
f(k+1);
{int t = a[i]; a[i] = a[k]; a[k] = t;}
}
}
private static boolean check() {
if(a[0] + a[1] + a[3] + a[5] == a[0] + a[2] + a[4] + a[8] &&
a[0] + a[1] + a[3] + a[5] == a[5] + a[6] + a[7] + a[8] &&
a[0] + a[2] + a[4] + a[8] == a[5] + a[6] + a[7] + a[8]
) {
return true;
}
return false;
}
}
答案:144