问题描述:
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
A9 64 83 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;}}}
蓝桥纸牌三角形 JAVA暴解