六角幻方—题解

标题:六角幻方

把 1 2 3 ... 19 共19个整数排列成六角形状,如下:

* * *

* * * *

* * * * *

* * * *

* * *

要求每个直线上的数字之和必须相等。共有15条直线哦!

再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。

请你填写出中间一行的5个数字。数字间用空格分开。

这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)

解题思路:      DFS

源代码:


/**
 *
 *  六角幻方搜索
 *
 *
 */

public class Main1
{
	static int table[] = {1,2,3,4,5,6,7,8,9,10,11,12,14,16,17,18,19}; //内容
	public static void main(String[] args)
	{
		int arr[] = new int[17];
		boolean step[]= new boolean[20];
		step[15] = step[13] = true;

		dfs(arr, 0, step);
	}

	private static void dfs(int[] arr, int ws, boolean[] step)
	{
		if (ws == 5)
		{
			if (28 + arr[0] != arr[1] + arr[2] + arr[3] + arr[4])return;
		}
		if (ws == 6)
		{
			if (28 + arr[0] != 15 + arr[1] + arr[5]) return ;
		}
		if (ws == 10)
		{
			if (28 + arr[0] != arr[5] + arr[6] + arr[7] + arr[8] + arr[9])return;
		    if (28 + arr[0] != arr[0] + arr[4] + arr[9]) return;
		}
		if (ws == 11)
		{
			if (28 + arr[0] != 13 + arr[2] + arr[6] + arr[10]) return;
		}
		if (ws == 14)
		{
			if (28 + arr[0] != arr[10] + arr[11] + arr[12] + arr[13])return;
			if (28 + arr[0] != 13 + arr[3] + arr[8] + arr[13]) return;
		}
		if (ws == 15)
		{
			if (28 + arr[0] != arr[5] + arr[10] + arr[14]) return;
			if (28 + arr[0] != arr[0] + arr[3] + arr[7] + arr[11]+arr[14])return;
		}
		if (ws == 17)
		{
			if (28 + arr[0] != arr[14] + arr[15]+arr[16]) return;
			if (28 + arr[0] !=15+ arr[2]+arr[7] + arr[12]+arr[16]) return;
			if (28 + arr[0] != arr[9] + arr[13] + arr[16]) return;

			output(arr);return;
		}
		 for (int i = 0; i < table.length; i++)
		 {
			if (step[table[i]] == false)
			{
				step[table[i]] = true;
				arr[ws] = table[i];
				dfs(arr, ws+1, step);
				step[table[i]] = false;
			}
		 }
	}

	private static void output(int[] arr)
	{
         for (int i = 0; i < arr.length; i++)
         {
        	 System.out.print(arr[i] + " ");
         }
	     System.out.println();
	}
}

时间: 2024-08-03 12:36:44

六角幻方—题解的相关文章

六角幻方 C语言

方法可能有点笨,采取的是先外圈(1-12),再中间(13-18)的排序方法,这样能尽可能先剪枝剪掉三个求和的,再去掉四个求和的. 但是只用数组,检查重复似乎是一件很困难的事情,得到的十二个结果实际上是一个,2(镜像)*6(角度) //原创代码,作者:lhy1024 #include<stdio.h> #include<time.h> #define SUM 38 int count=0; int check(int a[],int flag); int arrange(int a[

蓝桥杯 2014本科C++ B组 六角填数 枚举排列

标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num

HTML5 Canvas 六角光阑动态效果

光阑是光具组件中光学元件的边缘.框架或特别设置的带孔屏障,本人实现了结构比较简单的六角光阑,效果有点像宇航员在徐徐张开的飞船舷窗中看到逐渐完整的地球,下面四张图可以感受一下. 当然看动态效果才能真正体验,要看完整的演示请下载:https://files.cnblogs.com/files/xiandedanteng/slotAnimation.rar 并用chrome打开. 代码如下: <!DOCTYPE html> <html lang="utf-8"> &l

六角填数---第五届蓝桥杯

/* * 如图[1.png]所看到的六角形中,填入1~12的数字. 使得每条直线上的数字之和都同样. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案.不要填写多余的内容. */ public class 六角填数 { public static void main(String[] args) { // TODO Auto-generated method stub long start = System.currentTimeMillis(); //

WPS文字处理中六角括号怎么输入

Word作为好用的办公软件,其中包含了许多数学符号,但是WPS作为比Word稍逊一筹的文字处理软件,其中有很多数学符号是没有的,比如六角括号,那该如何输入呢?为了方便大家的使用,下面就教大家在WPS文字处理软件中输入六角括号的方法. MathType作为专业的公式编辑器,其中包括各种数学符号,光括号的种类就有很多,除了我们经常用的圆括号,方括号,花括号之外,也包括六角括号.该软件免费获取地址参考:http://wm.makeding.com/iclk/?zoneid=13396. 具体操作步骤如

2014蓝桥杯——六角填数

标题:六角填数 如图所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 #define eps 10e-10 8

一日一练 六角填数

//六角填数 //2015-03-12 //[email protected] #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; #define eps 10e-10 #define N 15 static int A[N],vis[N]; static int t[7]; void dfs(int x) { if(x==1||

【纸模】六角大王 Super 5.6 CHS 简体中文版 U20080725+[手册]窗口与工具的概要(PDF格式)

六角大王5.6简体中文版中文化:star21 主界面<ignore_js_op> 人体生成模式<ignore_js_op> 动画<ignore_js_op> <ignore_js_op> 什么是六角大王?六角大王是一款免费的3D软件,是商业版<六角大王Super>的前身.六角大王因其具有简单地操作性和自由创建模型的灵活性,所以无论是在3D初学者还是各领域的专业设计师中都有着很高的评价. 六角大王简介六角大王是终作股份有限公司开发与销售的一款以个人

CSS3画五角星和六角星

最终想要实现的效果 一.五角星 在画五角星之前首先分析这个五角星是如何实现,由哪几个部分构成的,示意图如下: 三个顶角向上的三角形,通过设置旋转和定位相互重叠和拼接实现最终的五角星效果. 为了语义化和代码更加简便,所以使用伪类来添加内容. 1.设置一个等腰三角形,并使用transform将其旋转到合适的角度   transform: rotate(35deg); .star{ width:0px;height:0px; border-bottom:70px solid rgba(244,0,0,