幻方(Magic Square)

幻方(Magic Square)

幻方概述

什么是幻方呢?幻方(Magic Square)就是指在n×n(n行n列)的方格里填上一些连续的数字,使任意一行、任意一列和对角线上的数字的和都相等。例如有3×3的3行3列的幻方叫三阶幻方,4×4的4行4列的幻方叫四阶幻方,5×5的5行5列的幻方叫五阶幻方等等。

幻方最早记载于中国公元前500年的春秋时期《大戴礼》中,这说明中国人民早在2500年前就已经知道了幻方的排列规律。除了“河图”,中国古代还有“洛书”之说,相传在大禹治洪水时,洛水中浮出一只大乌龟,背上有图有字,人们称之为“洛书”。

在幻方中每行、每列、每条对角线上各数的和都相等,这个和称为“幻和”。

幻和 = 总数和 ÷ 阶数

奇数幻方中,中间数 = 幻和 ÷ 阶数

由1、2、3、……等连续自然数生成的幻方为基本幻方。在此基础上各数再加或减一个相同的数,可组成由零或负数组成的新幻方。也就是说,编排n阶幻方时,不一定非要从1开始,只要是这些数能构成等差数列就可以了。

一般我们把奇数×奇数的幻方叫奇阶幻方,偶数×偶数的幻方叫偶阶幻方,填奇阶幻方和偶阶幻方的有着不同的方法。

一、奇阶幻方通用构造方法

口诀(又称为罗伯法):

一居上行正中央,

依次斜填切莫忘,

上出框界往下写,

右出框时左边放,

重复便在下格填,

出角重复一个样。

解释:

把1(或最小的数)放在第一行正中; 按以下规律排列剩下的(n×n-1)个数:

1、每一个数放在前一个数的右上一格;

2、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;

3、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;

4、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;

5、如果这个数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。

三阶幻方为例子:

一居上行正中央——数字 1 放在首行最中间的格子中。如下图:

依次斜填切莫忘——向右上角斜行,依次填入数字。如下图:

上出框界往下写——如果出了上框边界,就将数字填在该列最下面空格里。如下图:

右出框时左边放——如果出了右框边界,就将数字填在该行最左空格里。如下图:

重复便在下格填——如果右上格子已填数字,就填在前一数字下面空格里。如下图:

出角重复一个样——如果朝右上角出框界,和“重复”的情况做同样处理。如下图:

最后8和9按照右出界、上出界的方法填写,如下图:

完成!

按照这种方式,完成后,做镜像或旋转对称,可得到实际相同的其他填法,如:

 

用该填法得到的5阶幻方:

7阶幻方:

二、偶数阶幻方

偶阶幻方的概念:一个n阶幻方,当n为偶数时,我们称幻方为偶阶幻方。

偶阶幻方分为双偶幻方和单偶幻方。当n可以被4整除时,我们称该偶阶幻方为双偶阶幻方,如8阶、12阶、16阶等;当n不可被4整除时,我们称该偶阶幻方为单偶阶幻方(即4M+2式幻方),如6阶、10阶、14阶等。偶数阶幻方的构造方法由此分为两类:双偶阶幻方和单偶阶幻方。

待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyQt】06-.ui文件转.py文件

文章目录 前言方法一、基本脚本查看自己的uic安装目录 方法二、添加到扩展工具里面(失败了)方法二的成功步骤总结 前言 方法一、基本脚本 将Qt Designer(一种图形用户界面设计工具)生成的.ui文件转换为Python代码的脚本。 pytho…

win11安装mysql8.3.0压缩包版 240206

mysql社区版安装包版windows安装包下载地址 在系统环境变量path无点.的情况下 powershell 可以 .\ 或 ./ 开头表示当前文件夹cmd 可以直接命令或.\开头, 不能./开头 所以 .\ 在cmd和powershell中通用 步骤 在解压目录 .\mysqld --initialize-insecure root无密码初始化.\m…

【大模型上下文长度扩展】LongLoRA:长序列大模型微调新方式

LongLoRA:长序列大模型微调新方式 核心问题子问题1: 上下文窗口限制子问题2: 计算资源限制子问题3: 高效微调方法的缺乏低秩权重更新(LoRA)S2-Attn(Shifted Sparse Attention) 分析不足 扩展大模型处理长上下文能力不同…

Netty核心原理与基础实战(二)——详解Bootstrap

接上篇:Netty核心原理与基础实战(一) 1 Bootstrap基础概念 Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务端的Netty组件的组装,以及Netty程序的初始化和启动执行。Netty的官方解释是…

【数据结构与算法】二叉树(Binary Tree)

相关推荐:堆(Heap) / 堆排序(HeapSort) / TopK 文章目录 1.树1.1 树相关概念1.2 举例树的应用 2. 二叉树2.1 二叉树分类2.2 特殊的二叉树2.3 二叉树的存储结构 3. 二叉树实现与热门问题 1.树 树是一种非线性的数据结构…

力扣:42. 接雨水 84.柱状图中最大的矩形(单调栈,双指针)

这两道题解题思路类似,一个是单调递增栈,一个是单调递减栈。本篇博客给出暴力,双指针和单调栈解法。 42. 接雨水 题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后…

AMD64 linux 环境中,如何将main.go打包成不带 .exe 的可执行文件?

在终端中先进入main.go所在的文件夹,然后运行这三条命令即可 $env:GOOS"linux" $env:GOARCH"amd64" go build main.go 最终结果,成功出现不带 .exe 结尾的可执行包:

日本失去的三十年:去杠杆用了14年

去年以来,日股在日本央行转鹰预期、基本面改善和一系列监管新规的催化下高歌猛进,日经指数已经逼近90年代资产泡沫时期的高位。今年迄今累计上涨8.51%,领跑全球,“失落的三十年”似乎已经远去。 日本因何走向衰退?“失…

【C语言】位与移位操作符详解

目录 1.⼆进制和进制转换 ①十进制:生活中最常用 ②二进制:计算机中使用的,每个数字称为一个比特 ③八进制、十六进制也如上 ④二进制转十进制 ⑤十进制转二进制 ⑥二进制转八进制 ⑦二进制转十六进制 2.原码、反码、补码 3.移位操…

C++生成动态库给C#使用

在C中编写库文件供C#使用的过程可以分为以下几个步骤: 创建C项目并定义需要导出的函数或类。确保这些函数或类被正确地标记为extern "C"(对于C语言)或者__declspec(dllexport)(对于Windows平台)。 示例代码 …

SpringBoot实现即时通讯

SpringBoot实现即时通讯 功能简述 好友管理群组管理聊天模式:私聊、群聊消息类型:系统消息、文本、语音、图片、视频会话列表、发送消息、接收消息 核心代码 package com.qiangesoft.im.core;import com.alibaba.fastjson2.JSONObject; import com.q…

【已更新】2024美赛C题代码教学思路数据处理数学建模分析Momentum in Tennis

问题一完整的代码已给出,预计2号晚上或者3号凌晨全部给出。 代码逻辑如下: C题第一问要求我们开发一个模型,捕捉得分时的比赛流程,并将其应用于一场或多场比赛。你的模型应该确定哪名球员在比赛的特定时间表现得更好,…

AI-数学-高中-24-三角函数一般形式的各参数含义

原作者视频:三角函数】12三角函数一般形式的各参数含义(易)_哔哩哔哩_bilibili 1.函数中的A标识符:表示曲线中间平衡位置的振幅,值域为正负A:[-A,A]。 2.函数中的B标识符:决定曲线纵向上下平移…

Name or service not known问题解决和分析过程解析

目 录 一、问题描述 二、问题查处过程 (一)为何不能识别到bogon (二)为何会出现bogon (三)能不能更改bogon (四)能识别其他host的名字 三、问题分析 四、问题解决 …

git 克隆拉取代码出现私钥权限问题。

问题反馈: rootdd:~/android/boost-1.74-for-android-r20b# git clone https://github.com/liulilittle/boost-1.74-for-android-r20b.git Cloning into boost-1.74-for-android-r20b... WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /root/…

C++多态,父类有virtual, 子类继承时, 会拷贝父类的虚函数表吗

在 C 中,在父类中声明的虚函数会在子类中被继承,并且子类中所生成的对象如果重写了父类中的虚函数,其虚函数表将被更新以指向重写后的函数地址。因此,子类不需要再次拷贝一份父类的虚函数表,可以直接继承父类的虚函数表…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后,我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统,本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署,Docker 基于容器技术,它可以占用更少的资源,…

C#面:Error 和 Exception 的区别

在C#中,Error 和 Exception 是两个不同的概念。 Error(错误): 是指在程序运行过程中发生的严重问题,它表示了一个不可恢复的错误,通常是由于系统级别的问题导致的。例如,内存溢出、栈溢出、死…

【Android】代码混淆简单介绍

1.代码混淆的目的 1.1增加代码的安全性和保护知识产权。当开发人员编写的代码被编译成可执行文件后,存在被反编译的风险。通过进行代码混淆,可以使得反编译后的代码难以理解和分析,从而增加攻击者逆向工程的难度。 1.2代码混淆通过对代码进…

C++进阶--C++11包装器

目录 一、function包装器1.1 function包装器的概念1.2 function包装器实例化(统一类型)1.4 function包装器的意义 二、bind包装器2.1 bind包装器的概念2.1.1 bind包装器2.1.2 调用bind的一般形式 2.2 bind包装器绑定固定参数2.2.1 无意义的绑定2.2.2 绑定…