0
点赞
收藏
分享

微信扫一扫

【思特奇杯·云上蓝桥-算法集训营】第1周 13-七星填空

哈哈我是你爹呀 2022-01-08 阅读 68
算法

13-七星填空

如下图所示。在七角星的 14 个节点上填入 1 ~ 14的数字,不重复,不遗漏。 要求每条直线上的四个数字之和必须相等。

图片描述

图中已经给出了 3 个数字。 请计算其它位置要填充的数字,答案唯一。

填好后,请输出绿色节点的 4 个数字(从左到右,用空格分开)。

public class Main {
	static int[] a = {1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13};
	static int [] b;
	static boolean[] c, d;
	public static void main(String[] args) {
		c = new boolean[14];
		d = new boolean[14];
		b = new int[14];		
	b[0] = 6;
	b[8] = 14;
	b[10] = 11;
	c[0] = true;
	c[8] = true;
	c[10] = true;
	
	f(0);
}
private static void f(int i) {
	// 剪枝
	if (i == 9) {
		if (b[1] + b[2] + b[3] + b[4] != b[0] + b[2] + b[5] + b[8]) {
			return;
		}
	}
	if (i == 11) {
		if (b[1] + b[2] + b[3] + b[4] != b[0] + b[3] + b[6] + b[10]) {
			return;
		}
	}
	if (i == 12) {
		if (b[1] + b[2] + b[3] + b[4] != b[1] + b[5] + b[7] + b[11]) {
			return;
		}
	}
	if (i == 13) {
		if (b[1] + b[2] + b[3] + b[4] != b[9] + b[10] + b[11] + b[12]) {
			return;
		}
	}
	if (i == 14) {
		if (b[1] + b[2] + b[3] + b[4] != b[7] + b[8] + b[12] + b[13]) {
			return;
		}
		if (b[1] + b[2] + b[3] + b[4] != b[4] + b[6] + b[9] + b[13]) {
			return;
		}
		for (int j = 0; j < c.length; j++) {
			System.out.print(j==0 ? "" : " ");
			System.out.print(b[j]);
		}
		return;
	}
	if (c[i] == false) {
		for (int j = 0; j < a.length; j++) {
			if (d[j] == false) {
				d[j] = true;
				c[i] = true;
				b[i] = a[j];
				f(i + 1);
				c[i] = false;
				d[j] = false;
			}
		}
	} else {
		f(i + 1);
	}
}
}
举报

相关推荐

0 条评论