------文章底部代码分享
一、题目二、解题 2.1标题:六角填数 如图所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容。
这个题咋的一看会给人一种很复杂的感觉,事实上这个题只需要通过全排列就可以得出答案了,因为我们可以不考虑这个图像的形状,只需要考虑每条线所连接的点,分析如下图:
2.2可取数字有:1,2,3,4,5,6,7,8,9,10,11,12 ;
因为 1 ,3 ,8 已经存在,所以只需要将剩下的数字填入,然后计算每一条线的总和;( 例如:8 + x1 + x2 + x3 8 + x4 + x7 + 3 )
2.3进入代码环节,我们首先要声明一个全局数组,将空白处可填入的数值传入;
2.4利用动态规划编写一个全排列方法,将每一种填写方式罗列出来;
( 全排列用过很多次了,如过看不懂可以看我之前发表的《动态规划-简单易理解版》 )
三、代码分享增加返回条件,如果坐标到达最大值,则判断是否满足每条线上的元素相加都相等,满足则输出 * 位置的元素,反之则直接返回;
( 判断方法写法可以有很多种,看个人爱好,也可以在输出后直接通过 System.exit(0) 结束 JVM )
public class Main{
static int[] arr = { 2, 4, 5, 6, 7, 9, 10, 11, 12 };
public static void main(String[] args) {
permutation(0);
}
private static void permutation(int x) {
if (x == arr.length) {
int temp = 8 + arr[0] + arr[1] + arr[2];
if (8 + arr[3] + arr[6] + 3 == temp)
if (1 + arr[0] + arr[3] + arr[5] == temp)
if (1 + arr[1] + arr[4] + arr[8] == temp)
if (arr[2] + arr[4] + arr[7] + 3 == temp)
if (arr[5] + arr[6] + arr[7] + arr[8] == temp)
System.out.println(arr[3]);
return;
}
for (int i = x; i < arr.length; i++) {
int temp = arr[x];
arr[x] = arr[i];
arr[i] = temp;
permutation(x + 1);
arr[i] = arr[x];
arr[x] = temp;
}
}
}



