A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。
要求每个边的和相等。
……我改了图,方便看……
1
9 6
4 8
3 5 7 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
注意:需要提交的是一个整数,不要提交任何多余内容。
笨笨有话说:
感觉可以暴力破解哦。
麻烦的是,对每个排法还要算出它的旋转、镜像排法,看看有没有和历史重复。
歪歪有话说:
人家又不让你把所有情况都打印出来,只是要算种类数。
对于每个基本局面,通过旋转、镜像能造出来的新局面数目不是固定的吗?
思路:这种题先考虑全排列,重点看一下歪歪说的话,就可。
public class Demo3纸牌三角形 {
static int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //全局变量,数组含1-9
static int ans = 0; //全局变量,总和
public static void main(String[] args) {
f(0); //调用方法
System.out.println(ans/3/2); //旋转3种、镜像2种
}
public static void f(int x) {
if (x == 9) { //满足一个三角形
int a1 = arr[0] + arr[1] + arr[3] + arr[5]; //左腰边
int a2 = arr[0] + arr[2] + arr[4] + arr[6]; //右腰边
int a3 = arr[5] + arr[6] + arr[7] + arr[8]; //底边,注意这个是取数组下标
if (a1 == a2 && a2 == a3) { //满足条件,ans++
ans++;
}
}
for (int i = x; i < 9; i++) { //全排列,记不住就得背过套公式!!!
int y = arr[x];
arr[x] = arr[i];
arr[i] = y;
f(x + 1);
y = arr[x];
arr[x] = arr[i];
arr[i] = y;
}
}