C#,任意阶幻方(Magic Square)的算法与源代码

news2025/1/15 5:52:04

1 什么是幻方?

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。
幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同一列和同一对角线上的几个数的和都相等。

2 幻方的历史纪录

在一个由若干个排列整齐的数组成的正方形中,正方形中任意一横行、一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为“幻方”。中国古代称为“河图”、“洛书”,又叫“纵横图”。

九宫洛书蕴含奇门遁甲的布阵之道。九宫之数源于《易经》。幻方也称纵横图、魔方、魔阵,它是科学的结晶与吉祥的象征,发源于中国古代的洛书——九宫图。公元前一世纪,西汉宣帝时的博士戴德在他的政治礼仪著作《大戴礼·明堂篇》中就有“二、九、四、七、五、三、六、一、八”的洛书九宫数记载。洛书被世界公认为组合数学的鼻祖,它是中华民族对人类的伟大贡献之一。同时,洛书以其高度抽象的内涵,对中国古代政治伦理、数学、天文气象、哲学、医学、宗教等都产生了重要影响。在远古传说中,于治国安邦上也具有积极的寓意!包括洛书在内的幻方自古以来在亚、欧、美洲不少国家都被作为驱邪避凶的吉祥物,这种古代地域广泛的图腾应该说是极其少见的。1975年上海人民出版社出版的自然辩证法丛书《自然科学大事年表》,对于幻方作了特别的述说:“公元前一世纪,《大戴礼》记载,中国古代有象征吉祥的河图洛书纵横图,即为九宫算,被认为是现代‘组合数学’最古老的发现。”还附了全书唯一的插图!

2500年前,孔子在他研究《易经》的著作《系词上传》中记载了:“河出图,洛出书,圣人则之。”最早将数字与洛书相连的记载是2300年前的《庄子·天运》,它认为:“天有六极五常,帝王顺之则治,逆之则凶。九洛之事,治成德备,监照下土,天下戴之,此谓上皇。”明代数学家程大位在《算法统宗》中也曾发出“数何肇?其肇自图、书乎?伏羲得之以画卦,大禹得之以序畴,列圣得之以开物”的感叹,大意是说,数起源于远古时代黄河出现的河图与洛水出现的洛书,伏羲依靠河图画出八卦,大禹按照洛书划分九州,并制定治理天下的九类大法,圣人们根据它们演绎出各种治国安邦的良策,对人类社会与自然界的认识也得到步步深化。大禹从洛书中数的相互制约,均衡统一得到启发而制定国家的法律体系,使得天下一统,归于大治,这是借鉴思维的开端。这种活化思维的方式已成为科学灵感的来源之一。从洛书发端的幻方在数千年后更加生机盎然,被称为具有永恒魅力的数学问题。

十三世纪,中国南宋数学家杨辉在世界上首先开展了对幻方的系统研究,欧洲十四世纪也开始了这方面的工作。著名数学家费尔玛欧拉都进行过幻方研究。

中国不仅拥有幻方的发明权,而且是对幻方进行深入研究的国家。公元13世纪的数学家杨辉已经编制出3-10阶幻方,记载在他1275年写的《续古摘奇算法》一书中。在欧洲,直到1514年,德国著名画家丢勒才绘制出了完整的四阶幻方。

而在国外,十二世纪的阿拉伯文献也有六阶幻方的记载,中国的考古学家们曾经在西安发现了阿拉伯文献上的五块六阶幻方,除了这些以外,历史上最早的四阶幻方是在印度发现的,那是一个完全幻方(后面会提到),而且比中国的杨辉还要早了两百多年,印度人认为那是天神的手笔.1956年西安出土一铁片板上所刻的六阶幻方(古阿拉伯数字)十三世纪,东罗马帝国才对幻方产生兴趣,但却没有什么成果.

直到十五世纪,住在君士坦丁堡的魔索普拉才把中国的纵横图传给了欧洲人,欧洲人认为幻方可以镇压妖魔,所以把它作为护身符,也把它叫作「Magic Square」.

任意阶幻方构造法,任意维幻方构造法,任意次幻方构造法,都早已找到。不存在最大阶幻方的世界纪录之类.对于各种媒体报导的幻方世界之最,很多是不实报导,不存在未解最大阶数幻方。

3 源程序

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        public static int[,] Magic_Square(int n)
        {
            int[,] magicSquare = new int[n, n];
            int i = n / 2;
            int j = n - 1;

            for (int num = 1; num <= n * n;)
            {
                if (i == -1 && j == n)
                {
                    j = n - 2;
                    i = 0;
                }
                else
                {
                    if (j == n)
                    {
                        j = 0;
                    }
                    if (i < 0)
                    {
                        i = n - 1;
                    }
                }

                if (j >= 0) 
                {
                    if (magicSquare[i, j] != 0)
                    {
                        j -= 2;
                        i++;
                        continue;
                    }
                    else
                    {
                        magicSquare[i, j] = num++;
                    }
                }

                j++;
                i--;
            }

            return magicSquare;
        }
    }
}

32幻方:

 128幻方:

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

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

相关文章

java求职学习day12

1 泛型机制&#xff08;熟悉&#xff09; 1.1 基本概念 &#xff08;1&#xff09;通常情况下集合中可以存放不同类型的元素&#xff0c;是因为将所有对象都看作Object类型放入&#xff0c;因此从集合中取出元素时&#xff0c;也是Object类型&#xff0c;为了表达该元素真实的…

uni-app h5修改浏览器导航栏的 title以及icon

1.title 在pages.json文件中修改:"navigationBarTitleText":"uni-app" 2.icon的修改 2.1 在static中新建一个index.html文件作为模板文件&#xff0c;并且将你的icon图片也放在static文件夹下 2.2 在index.html文件中加入如下代码&#xff08;记得icon文件…

Mac——Docker desktop安装与使用教程

摘要 本文是一篇关于Mac系统下Docker Desktop安装与使用教程的博文。首先介绍连接WiFi网络&#xff0c;然后详细阐述了如何在Mac上安装Docker&#xff0c;包括下载地址以及不同芯片版本的选择。接着讲解了如何下载基础镜像和指定版本镜像&#xff0c;旨在帮助用户在Mac上高效使…

OJ题目下篇

我们今天继续来看链表的算法题目 我们先来看第一道题&#xff1a; 这是一道牛客网的题目&#xff1a; 链表的回文结构_牛客题霸_牛客网 我们来看这道题&#xff1a;首先我们要判断是不是回文结构&#xff0c;我们之前判断过数组的回文&#xff0c;这是比较好判断的&#xff…

25/1/14 算法笔记<强化学习> CBR加强化学习

CBR,基于案例的推理&#xff0c;它是一种基于过去的实际经验或经历的推理&#xff0c;他可以根据过往的案例找到与当前案例最相关的案例&#xff0c;然后对该案例做改动来解决当前的问题。 CBR的过程 CBR可以看作一个循环过程&#xff1a;相似按键检索-->案例重用-->案…

初识JAVA-面向对象的三大特征之多态

1. 重温面向对象 面向对象是一种解决问题的思想&#xff0c;它把计算机程序看作是各种对象组合起来的。每个对象都有自己的数据&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;&#xff0c;主要依靠对象之间的交互来解决和实现问题。Java是一门纯面向对象的语…

Pytorch基础教程:从零实现手写数字分类

1.Pytorch简介 ‌PyTorch是一个开源的深度学习框架&#xff0c;由Facebook的人工智能研究院&#xff08;FAIR&#xff09;开发&#xff0c;并于2017年1月正式推出。‌ PyTorch以其灵活性和易用性著称&#xff0c;特别适合于深度学习模型的构建和训练。它基于Torch张量库开发&a…

高性能现代PHP全栈框架 Spiral

概述 Spiral Framework 诞生于现实世界的软件开发项目是一个现代 PHP 框架&#xff0c;旨在为更快、更清洁、更卓越的软件开发提供动力。 特性 高性能 由于其设计以及复杂精密的应用服务器&#xff0c;Spiral Framework框架在不影响代码质量以及与常用库的兼容性的情况下&a…

运维高级课作业三

源码编译安装httpd 2.4 首先下载好httpd-2.4.62.tar.bz2的安装包 将这个文件传入Linux中 将他解归档解入/usr/src/ rpm -e httpd --nodeps # 如果系统自带httpd这个软件要删除掉&#xff0c;两个软件不能同时运行 yum -y install apr apr-devel cyrus-sasl-devel expat-dev…

.Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)

一、UI效果 二、新建用户控件&#xff1a;VideoViewControl.axaml 需引用&#xff1a;VideoLAN.LibVLC.Windows包 Linux平台需安装&#xff1a;VLC 和 LibVLC &#xff08;sudo apt-get update、sudo apt-get install vlc libvlccore-dev libvlc-dev&#xff09; .axaml 代码 注…

【HM-React】08. Layout模块

基本结构和样式reset 结构创建 实现步骤 打开 antd/Layout 布局组件文档&#xff0c;找到示例&#xff1a;顶部-侧边布局-通栏拷贝示例代码到我们的 Layout 页面中分析并调整页面布局 代码实现 pages/Layout/index.js import { Layout, Menu, Popconfirm } from antd impor…

Canvas简历编辑器-选中绘制与拖拽多选交互方案

Canvas简历编辑器-选中绘制与拖拽多选交互方案 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM&#xff0c;并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计。那么此时我们就依然在轻量级DOM的基础上&#xff0c;关注于实现选中绘制与拖拽多选交…

C# OpenCV机器视觉:转速测量

在一个看似平常却又暗藏神秘能量的日子里&#xff0c;阿杰正在他那充满科技感的实验室里&#xff0c;对着一堆奇奇怪怪的仪器发呆。突然&#xff0c;手机铃声如一道凌厉的剑气划破寂静&#xff0c;原来是工厂的赵厂长打来的紧急电话&#xff1a;“阿杰啊&#xff0c;咱们工厂新…

vue2制作长方形容器,正方形网格散点图,并且等比缩放拖动

需求&#xff1a;有个长方形的容器&#xff0c;但是需要正方形的网格线&#xff0c;网格线是等比缩放的并且可以无线拖动的&#xff0c;并且添加自适应缩放和动态切换&#xff0c;工具是plotly.js,已完成功能如下 1.正方形网格 2.散点分组 3.自定义悬浮框的数据 4.根据窗口大小…

0基础跟德姆(dom)一起学AI 自然语言处理13-注意力机制介绍2

1 注意力机制规则 它需要三个指定的输入Q(query), K(key), V(value), 然后通过计算公式得到注意力的结果, 这个结果代表query在key和value作用下的注意力表示. 当输入的QKV时, 称作自注意力计算规则&#xff1b;当Q、K、V不相等时称为一般注意力计算规则 例子&#xff1a;seq2…

慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板

UI库管理 UI库管理分为平台级和自建两种&#xff0c;其中平台级就是慧集通平台自己内置的一些ui库所有客户均可调用&#xff0c;自建则是平台支持使用者自己根据规则自己新增对应的UI库。具体界面如下&#xff1a; 自建UI库新增界面&#xff1a; 注&#xff1a;平台级UI库不支…

通过一个算法的设计来了解栈的一些应用

目录 1.前言 2.步骤 3.代码实现 4.测试 5.运行结果 6.一些思考 7.一些应用示例 1.前言 掌握堆栈的基本原理 掌握堆栈的存储结构 掌握堆栈的进栈、出栈&#xff1b; 判断栈空的实现方法 掌握应用堆栈实现括号匹配的原理和实现方法&#xff1b; 熟悉python语言编程 熟练…

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …

字符串算法篇——字里乾坤,算法织梦,解构字符串的艺术(下)

文章目录 前言第一章&#xff1a;最长公共前缀1.1 题目链接&#xff1a;https://leetcode.cn/problems/longest-common-prefix/description/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现&#xff1a; 第二章&#xff1a;最长回文子串2.1 题目链接&#xff1a…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道 特点&#xff1a; 覆盖范围有限&#xff1a;通常局限在几千米范围内&#xff0c;比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高&#xff1a;一般能达到 10Mbps…