六角幻方

六角幻方算法与实现:数学游戏的编程挑战 六角幻方,又称为蜂巢幻方或六边形幻方,是一种在数学游戏中具有一定历史的智力谜题。它由一系列带有数字的六边形组成,这些六边形填满在规则的六边形网格中,其排列遵循一定的数学原则,以满足特定的条件。在这个游戏中,玩家需要移动六边形,以确保网格中的每一行、每一列以及对角线上的数字之和都等于预定的目标值。这一目标值被称为幻方的常数或幻和。递归算法是一种在解决问题时将问题分解成相似子问题的策略,并调用自身来解决这些子问题的方法。在六角幻方的解决过程中,递归算法的应用体现在将一个大的问题分解成更小、更易管理的部分。 阅读详情
把 1 2 3 ... 19 共19个整数排列成六角形状,如下:

    * * *
   * * * *
  * * * * *
   * * * * 
    * * *

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

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

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

    这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)
<img src="https://img-blog.youkuaiyun.com/20150315202424193?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3Ryb25nTWFuVHdv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
public class A {
	int[][] am = new int[15][19];
	int[] bm = new int[15];
	int[] col = new int[19];

	int[][] line = { { 0, 1, 2 }, { 3, 4, 5, 6 }, { 7, 8, 9, 10, 11 },
			{ 12, 13, 14, 15 }, { 16, 17, 18 }, { 0, 3, 7 }, { 1, 4, 8, 12 },
			{ 2, 5, 9, 13, 16 }, { 6, 10, 14, 17 }, { 11, 15, 18 },
			{ 2, 6, 11 }, { 1, 5, 10, 15 }, { 0, 4, 9, 14, 18 },
			{ 3, 8, 13, 17 }, { 7, 12, 16 } };

	void init() {
		for (int i = 0; i < line.length; i++) {
			for (int j = 0; j < line[i].length; j++) {
				am[i][line[i][j]] = 1;
			}
		}

		for (int i = 0; i < bm.length; i++)
			bm[i] = 38;

		for (int i = 0; i < col.length; i++)
			col[i] = i;
	}

	void switch_row(int a, int b) {
		if (a == b)
			return;

		for (int j = 0; j < am[a].length; j++) {
			int tmp = am[a][j];
			am[a][j] = am[b][j];
			am[b][j] = tmp;
		}

		int tmp = bm[a];
		bm[a] = bm[b];
		bm[b] = tmp;
	}

	int gcd(int a, int b) {
		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	// k列,用k行消i行
	void xiao_yuan(int k, int i) {
		int u = am[k][k];
		int v = am[i][k];
		if (u == 0 || v == 0)
			return;

		int g = gcd(Math.abs(u), Math.abs(v));

		for (int j = 0; j < am[i].length; j++)
			am[i][j] = am[i][j] * u / g - am[k][j] * v / g;

		bm[i] = bm[i] * u / g - bm[k] * v / g;
	}

	void try_switch_col(int k) {
		int w = k;
		for (int j = k; j < am[k].length; j++) {
			if (am[k][j] != 0) {
				w = j;
				break;
			}
		}

		if (w == k)
			return;

		for (int i = 0; i < am.length; i++) {
			int tmp = am[i][k];
			am[i][k] = am[i][w];
			am[i][w] = tmp;

			tmp = col[k];
			col[k] = col[w];
			col[w] = tmp;
		}
	}

	void gauss() {
		for (int j = 0; j < am.length; j++) {
			for (int i = j; i < am.length; i++) {
				if (am[i][j] != 0) {
					switch_row(i, j);
					break;
				}
			}

			try_switch_col(j);

			for (int k = 0; k < am.length; k++) {
				if (k != j)
					xiao_yuan(j, k);
			}
		}
	}

	void show() {
		for (int i = 0; i < am.length; i++) {
			for (int j = 0; j < am[i].length; j++)
				System.out.print(String.format("%3d", am[i][j]));
			System.out.print(String.format("%6d", bm[i]));
			System.out.println();
		}
		System.out.println("----");
		for (int i = 0; i < 19; i++)
			System.out.print(col[i] + " ");
		System.out.println();
	}

	void test(int[] x) {
		for (int k = 11; k >= 0; k--) {
			int t1 = 0;
			for (int i = 12; i < 19; i++)
				t1 += am[k][i] * x[i];
			int t = (bm[k] - t1) / am[k][k];

			if (t < 1 || t > 19)
				return; // 非法值
			for (int i = k + 1; i < 19; i++)
				if (t == x[i])
					return; // 重复值

			x[k] = t;
		}

		System.out.println("find: ");
		int[] y = new int[19];
		for (int i = 0; i < 19; i++)
			y[col[i]] = x[i];
		for (int i = 0; i < 19; i++)
			System.out.print(y[i] + " ");

		// for(int i=0; i<19; i++) System.out.print(x[i] + " ");
		System.out.println();
	}

	// k: 当前要填充的位置
	void f(int[] x, int k) {
		if (k < 12) {
			test(x);
			return;
		}

		L1: for (int n = 1; n <= 19; n++) {
			for (int i = k + 1; i < 19; i++)
				if (x[i] == n)
					continue L1;
			x[k] = n;
			f(x, k - 1);

			if (k == 18)
				System.out.println(".. " + n);
		}
	}

	void search() {
		int[] x = new int[19];

		f(x, 18);
	}

	public static void main(String[] args) {
		A a = new A();
		a.init();

		a.gauss();
		a.show();

		a.search();
	}
}

h5游戏六角拼拼源码 立即下载

相关推荐

六角幻方_六角幻方_

因篇幅问题,源文件里有详细功能说明,以及源代码

六角幻方(高斯消元法求解)

看了网上很多都是用dfs解决的,于是自己就写了一篇用高斯消元法的解决方法 问题描述 把 1 2 3 … 19 共19个整数排列成六角形状,如下: 要求每个直线上的数字之和必须相等。共有15条直线哦! 再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见下图,黄色一行为所求。 请你填写出中间一行的5个数字。数字间用空格分开。 这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等) 解法 把15条直线看成是15条方程,每一个圆看成一个未知数,且未知数

m0_46200304的博客 1956

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 297

【回溯】B027_LQ_六角幻方 & 四阶幻方 & 九宫幻方 & 反幻方 & 魔方状态 & 纸牌三角形(恶心的剪枝)

把 1、2、3 … 19 共 19 个整数排列成六角形状,如下: 要求每个直线上的数字之和必须相等,共有 15 条 直线哦! 再给点线索吧!我们预先填好了 2 个数字,第一行的头两个数字是:15、13,如图。 请你填写出黄色一行的 5 个数字。数字间用空格分开 方法一:深搜+剪枝 思路 真的恶心, #include<bits/stdc++.h> using namespace std; int a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1

无敌兔0x01 877

国产信创麒麟操作系统 (kylin v10 x86架构) 离线安装nginx步骤(亲测,超详细步骤)、修改nginx配置文件、启动、重启、关闭nginx记录(亲测有效)

国产信创麒麟操作系统 (kylin v10 x86架构) 离线安装nginx步骤(亲测,超详细步骤)、修改nginx配置文件、启动、重启、关闭nginx记录(亲测有效)

qq445829096的博客 2757

Mplus实战:如何用潜在类别分析(LCA)快速搞定心理学数据分类?

本文详细介绍了如何运用Mplus软件进行潜在类别分析(LCA),以快速处理心理学数据并识别内部异质性群体。文章从数据准备、Mplus语法编写、模型拟合与选择,到结果解读与高级应用(如纳入协变量),提供了完整的实战指南,帮助研究者从变量视角转向个体视角,有效挖掘数据中的潜在子类别。

weixin_28318011的博客 409

蓝桥杯——六角幻方

标题:六角幻方    把 1 2 3 ... 19 共19个整数排列成六角形状,如下:    * * *   * * * *  * * * * *   * * * *     * * *    要求每个直线上的数字之和必须相等。共有15条直线哦!    再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。    请你填写出中间一行的5个数...

越努力,越幸运!!! 3473

AndroidKiller之APK 编译失败,无法继续下一步签名【BUG解决】【App反向解析】

文章目录项目场景:问题描述原因分析:解决方案:BUG解决 项目场景: AndroidKiller: 在反向解析APP包时报错:APK 编译失败,无法继续下一步签名。 网上很多方法都是无效的哈,我追究原因发现,这个bug的出现大部分情况都是因为Apktool的问题。 此方法:百分之百解决此bug! 错误如下: 问题描述 APK 编译失败,无法继续下一步签名! 原因分析: Apktool版本不适配的问题,现在的技术更新换代太快,我们安装AndroidKiller的时候,有时候不是官方渠道的话,他的版本是非常

一键难忘的博客 2万+

2014年第五届蓝桥杯C/C++ A组国赛 —— 第二题:六角幻方

标题:六角幻方 把 1 2 3 … 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * * * * * * 要求每个直线上的数字之和必须相等。共有15条直线哦! 再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。 请你填写出中间一行的5个数字。数字间用空...

Alex 1384

平头哥面试——芯片工程师面经

有5个成递增关系的32bit地址值,彼此之间的间隔大小不确定,可以把他们当成parameter来输入模块,现有一个32bit输入数据,要求用尽量少资源去的判断这个数处于哪2个地址之间(地址区间),并且输出区间号。a)后续大概会在9月下旬谈具体的薪资,他们现在也没想好今年应届生的薪资该给多少,到时候如果可以签三方的话可能会跳过意向书环节直接发offer,谈薪资肯定是通过电话来。b. 这边的CPU是自己研制的(玄铁),成都这边主要做存储和网络,都有SOC。a. 成都这边的网络部门具体做的业务有哪些?

FPGA/MATLAB学习教程/源码/项目合作开发 2688

SOMEIP协议--第三节[SOMEIP/SD](SD格式)

Entry和Option是SD报文中最重要的内容,是服务发现功能的承载。7.Minor Version是指当前服务的小版本号,可以配置,用于给用户区分当前服务的版本用的。注意:stop offer,stop subscribe,Subscribe Nack 这三条的TTL一定设为0,唯一和offer,subscribe,Subscribe的区别。Option用来辅助Entry实现其功能,是Entry携带的附加信息,作用上一般是用来告诉对端自己业务的ip和port信息,方便对端通过ip和port发送报文。

qq_41816308的博客 1338

六角幻方java

标题:六角幻方 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * * * * * * 要求每个直线上的数字之和必须相等。共有15条直线哦! 再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。 请你填写出中间一行的5个数字。数字间用空格分开。 这是一行用空格分开的整数,请通过浏览器提交答案,不要填...

weixin_43824233的博客 338

财务惊呼“不可能”!Python 自动识别 PDF 发票,数据秒级录入系统

电子发票(原生 PDF):这种最爽,文字是可以选中的。我们用 PyPDF2 直接提取文本,速度快,准确率 100%。 纸质扫描/拍照发票:这种是图片。必须上 OCR(光学字符识别)。我们要用百度开源的 PaddleOCR,这是目前中文识别效果最好的开源库之一,吊打早已过气的 Tesseract。

BUG猿的博客 1024

java实现第五届蓝桥杯六角幻方

六角幻方 里面的*在编写的时候会自动编译成线,这里就用代码的格式把题目弄过来 把 1 2 3 ... 19 共19个整数排列成六角形状,如下: * * * * * * * * * * * * * * * * * * * 要求每个直线上的数字之和必须相等。共有15条直线哦! 再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:1...

南 墙 1万+

YOLOv11改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 778

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝桥杯 六角幻方

题目: 标题:六角幻方     把 1 2 3 ... 19 共19个整数排列成六角形状,如下:     * * *    * * * *   * * * * *    * * * *      * * *     要求每个直线上的数字之和必须相等。共有15条直线哦!     再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行

CRZ_CC的博客 1833

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

六角幻方(DFS)

六角幻方     把 1 2 3 ... 19 共19个整数排列成六角形状,如下:     * * *    * * * *   * * * * *    * * * *      * * *     要求每个直线上的数字之和必须相等。共有15条直线哦!     再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.p

BRCOCOLI的博客 977

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

六角幻方—题解

标题:六角幻方     把 1 2 3 ... 19 共19个整数排列成六角形状,如下:     * * *    * * * *   * * * * *    * * * *      * * *     要求每个直线上的数字之和必须相等。共有15条直线哦!     再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.

First_sight的专栏 5427

六角幻方暴力填数

然后二级结论每种线的和都是38,所以只要暴力梅举5个数(不重复,在范围内),然后11个数都能表示出来了,然后还是要求这11个数在范围里不重复。最后发现只要x5放第二行中间的位置(左右都可以) 其他的点也跟着可以表示出来了 我这里表示出来的顺序就是从A-K。已知所有数的范围是从1-19并且没有重复,一共有15条边,并且每条边的数相等。只有三个点 并且15已知 所以只要有用一个未知数x1表示中间的那个点。然后我定义A-K点为a[0],a[6],a[7]…所以就确保剩下的16个数在1-19范围里,并且不重复。

yuyit_的博客 1290

用selen求解两种六角幻方

摘要:本文介绍了一种特殊的六角幻方求解方法,该幻方由1-24的数字填充在24个三角形中,要求每行、每60度斜条的数字和均为75。作者在张泽鹏先生selen版解法的基础上进行修改,构建约束条件模型,通过Rust语言实现快速求解。与SQL方案相比,selen能在瞬间完成计算,并输出满足条件的幻方排列结果。该解法展示了约束编程在组合数学问题中的高效性。

l1t的专栏 781

六角幻方(dfs+剪枝)

标题:六角幻方     把 1 2 3 ... 19 共19个整数排列成六角形状,如下:     * * *    * * * *   * * * * *    * * * *      * * *     要求每个直线上的数字之和必须相等。共有15条直线哦!     再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p

Become hunger become strong 1317

六角幻方问题的暴力解法探索

通过这个案例,我们展示了如何将数学问题转化为可计算的算法,并利用编程工具高效求解。六角幻方问题虽然复杂,但通过合理的优化和约束条件处理,可以大大减少计算量,这正是算法设计的魅力所在。六角幻方是一个有趣的数学难题,要求在六边形的15条边上填入1-19不重复的数字,使得每条边的和都相等。通过几何推理可以得出每条边的和都是38这个重要结论。传统的暴力搜索需要枚举17个变量,计算量巨大。其余11个点的值都可以通过这些变量表示出来。使用集合数据结构来高效检查数字是否重复。共有15条边,每条边的和必须等于38。

DiamondWolf89的博客 755

六角幻方java_蓝桥杯 六角幻方 2014年JavaB组决赛试题-Go语言中文社区

标题:六角幻方把 1 2 3 ... 19 共19个整数排列成六角形状,如下:* * ** * * ** * * * ** * * ** * *要求每个直线上的数字之和必须相等。共有15条直线哦!再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。请你填写出中间一行的5个数字。数字间用空格分开。这是一行用空格分开的整数,请通过浏览器提交答...

weixin_28788561的博客 178
上一篇: 海盗分金币
下一篇: ASP.NET和ASP.NET MVC的区别
StrongManTwo
博客等级 码龄12年 6粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值