栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA算法练习(9):六角填数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA算法练习(9):六角填数

------文章底部代码分享

 一、题目
标题:六角填数
如图所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

请通过浏览器提交答案,不要填写多余的内容。

二、解题 2.1

        这个题咋的一看会给人一种很复杂的感觉,事实上这个题只需要通过全排列就可以得出答案了,因为我们可以不考虑这个图像的形状,只需要考虑每条线所连接的点,分析如下图:

        可取数字有:1,2,3,4,5,6,7,8,9,10,11,12 ;
        因为 1 ,3 ,8 已经存在,所以只需要将剩下的数字填入,然后计算每一条线的总和;

        ( 例如:8 + x1 + x2 + x3         8 + x4 + x7 + 3 )

2.2

        进入代码环节,我们首先要声明一个全局数组,将空白处可填入的数值传入;

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

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号