问题描述:
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
A
9 6
4 8
3 7 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
思路:
1. 全排列问题;
2.
A a[0]
9 6 a[1] a[2]
4 8 a[3] a[4]
3 7 5 2 a[5] a[6] a[7] a[8]
三条边的和相等,即
int s1 = a[0]+a[1]+a[3]+a[5];
int s2 = a[0]+a[2]+a[4]+a[8];
int s3 = a[5]+a[6]+a[7]+a[8];
3. 旋转、镜像后相同的算同一种,即左右对称、三个角的为同一个,所以最后结果除以6;
代码:
package s01;
public class ZhiPai {
static int[] a = {1,2,3,4,5,6,7,8,9};
static int s;
public static void main(String[] args) {
fns(0);
System.out.print(s/6);
}
static void fns(int begin) {
if(begin==8) {
int s1 = a[0]+a[1]+a[3]+a[5];
int s2 = a[0]+a[2]+a[4]+a[8];
int s3 = a[5]+a[6]+a[7]+a[8];
if(s1==s2 && s2==s3)
s++;
}
for(int i=begin;i<=8;i++) {
int t = a[begin];
a[begin] = a[i];
a[i] = t;
fns(begin+1);
int m = a[begin];
a[begin] = a[i];
a[i] = m;
}
}
}