蓝桥纸牌三角形 JAVA暴解

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;
		}
	}

小剧场:我们时常接受失望,这样我们才能不断地重整旗鼓。

发布了108 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43771695/article/details/104551889
今日推荐