本文在用Python构造任意阶幻方的时候,参考的资料如下: 
- 维基百科:https://en.wikipedia.org/wiki/Magic_square
- 幻方:http://blog.csdn.net/dxx_111/article/details/50158355
- 论文:由矩阵构造奇数阶幻方的方法,高建国,河南大学学报

Python代码如下:(具体的构造方法可参看以上资料)

# -*- coding: utf-8 -*-
#利用numpy模块构造幻方
import numpy as np#列表循环向左移offset位
def shift_left(lst, offset):return [lst[(i+offset)%len(lst)] for i in range(len(lst))]#列表循环向右移offset位
def shift_right(lst, offset):return [lst[i-offset] for i in range(len(lst))]#构造奇数阶幻方函数
def magic_of_odd_order(n):p = (int)((n-1)/2)#创建矩阵1initial_lst1 = list(range(p+1,n))+list(range(p+1))initial_mat1 = []for i in range(n):initial_mat1.append(shift_left(initial_lst1, i))mat1 = np.array(initial_mat1)#创建矩阵2initial_lst2 = list(range(p,-1,-1))+list(range(2*p,p,-1))initial_mat2 = []for i in range(n):initial_mat2.append(shift_right(initial_lst2, i))mat2 = np.array(initial_mat2)#创建矩阵3,即元素全为1的矩阵mat3= np.ones((n,n),dtype=np.int)#构造幻方magic = n*mat2+mat1+mat3return magic#构造4n阶幻方函数
def magic_of_4n_order(n):mat = np.array(range(1,n*n+1)).reshape(n,n)for i in range((int)(n/4)):for j in range((int)(n/4)):for k in range(4): #将每个4*4小方块的对角线换成互补元素mat[k+4*j][k+4*i] = n*n+1-mat[k+4*j][k+4*i]mat[k+4*j][3-k+4*i] = n*n+1-mat[k+4*j][3-k+4*i]return mat#构造4n+2阶幻方函数
def magic_of_4n2_order(n):p = (int)(n/2)matA = magic_of_odd_order(p)matD = matA+p**2matB = matD+p**2matC = matB+p**2#交换矩阵块A与矩阵块C中特定元素的位置row = (int)((p-1)/2)for i in range(p):if i != row:for k in range((int)((n-2)/4)):matA[i][k],matC[i][k] = matC[i][k],matA[i][k]else:for k in range((int)((n-2)/4)):matA[i][row+k],matC[i][row+k] = matC[i][row+k],matA[i][row+k]#交换矩阵块B与矩阵块D中特定元素的位置col = (int)((p-1)/2)for j in range(col+2-(int)((n-2)/4),col+1):for i in range(p):matB[i][j],matD[i][j] = matD[i][j],matB[i][j]#合并矩阵块A,B,C,D组成幻方magic = np.row_stack((np.column_stack((matA,matB)),np.column_stack((matC,matD))))return magicdef main():order = eval(input('Enter the order of magic square(>=3): '))if order%2 ==1:magic = magic_of_odd_order(order)elif order%4 == 0:magic = magic_of_4n_order(order)else:magic = magic_of_4n2_order(order)print('Generating magic square of %d order......'%order)for row in magic:for col in row:print(col, end='\t')print()#验证生成的magic是否为幻方    val = input(("Do you want to validate?[Y|N]"))if val == 'Y' or val == 'y':print('每行的和:', np.sum(magic, axis=0))print('每列的和:', np.sum(magic, axis=1))print('主对角线的和:', sum([magic[i][i] for i in range(order)]))print('副对角线的和:', sum([magic[i][order-1-i] for i in range(order)]))print('It\'s Done!')main()

运行结果如下:




本次分享到此结束,欢迎大家批评与交流~~

Python之任意阶幻方的构造相关推荐

  1. 任意阶幻方的python编程实现

    摘要:提出任意阶幻方的python语言的实现方法,分为奇数阶,偶数阶(n为整数,分为4n阶和4n+2阶幻方),速度还算可以,你可以体会以下.测试999阶幻方可以算出来: 1,什么是幻方 幻方(Magi ...

  2. 任意阶幻方(魔方矩阵)C语言实现

    魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...

  3. 任意阶幻方解法及c++实现

    任意阶幻方的解法及c++实现 在一个由若干个排列整齐的数组成的正方形中,图中任意一横行.一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为"幻方".我国古代称为" ...

  4. 任意阶幻方的解法及c++实现

    任意阶幻方的解法及c++实现 在一个由若干个排列整齐的数组成的正方形中,图中任意一横行.一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为"幻方".我国古代称为" ...

  5. 任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。

    幻方分为3类.奇阶幻方(奇数).双偶幻方(能够被4整除,如8,12,16--).单偶幻方(4m+2形式,如6,10--),构造算法各不相同. 下面的程序中,奇阶幻方的构造算法为Merzirac法.双偶 ...

  6. Python实现奇数阶幻方(不用numpy)

    幻方(Magic Square),又称纵横图,即在一个n x n的方阵中,放入1~n2的数字,使之各行.各列和两条对角线上的数字之和正好都相等. 一个最基本的三阶幻方大概就是这个样子(当然,他们的镜像 ...

  7. 【qduoj】奇数阶幻方 (构造)

    题干: C语言_魔方阵 描述 魔方阵是一个古老的智力问题,它要求在一个m×m的矩阵中填入1-m2的数字(m为奇数),使得每一行.每一列.每条对角线的累加和都相等,如下为5阶魔方阵示例. 15 8 1 ...

  8. Matlab 基础应用01 - Python 基础应用 n阶幻方【MagicSquare】和构造

    前言: 本章介绍幻方的基本知识,同时利用Matlab 和 Python 构造简单的幻方方阵. 最后用幻方结合图像,展示了一个渐进的魔幻效果. 幻方定义: 简单介绍 幻方(Magic Square)是一 ...

  9. 任意n阶幻方(魔方)构造——C语言实现

    幻方的构造根据n的取值不同有不不同的解法.n取值为奇数,4的倍数(双偶数),非4的倍数的偶数(单偶数)分别对应3种不同的解法.具体步骤参考百度幻方解法. 接下来放代码 /**@Date 2019-09 ...

最新文章

  1. 微信9年:张小龙指明方向,微信AI全面开放NLP能力
  2. 开发中内存溢出问题及解决
  3. 机器学习笔记(八)集成学习
  4. 北斗导航 | Matlab实现电离层延迟计算:Klobuchar(源代码)
  5. HTTP协议容易犯的误区
  6. python最小化打开exe_如何用python使GoAgent窗口打开后自动最小化以及关闭之前的py.exe窗口...
  7. 斐波那契数列快速算法详解
  8. 连续对焦 auto对焦_如何在Windows 10上使用对焦辅助(请勿打扰模式)
  9. 基础功能2-python修改文件中所有文件名
  10. 信息学奥赛一本通(1181:整数奇偶排序)——快速排序
  11. c语言中递增递减运算符,递增++和递减-C ++中的运算符
  12. 如何打开VMware的vmdk虚拟磁盘文件
  13. python中软件包安装
  14. FTOUR2 - Free tour II
  15. 量化指标公式源码_最牛通达信量化副图指标公式源码.doc
  16. Python敏感词过滤DFA算法+免费附带敏感词库
  17. vassistx插件
  18. SVG中中文字体的显示
  19. [NIPS 2018] Stacked Semantics-Guided Attention Model for Fine-Grained Zero-Shot Learning
  20. C语言中的文件操作(二)

热门文章

  1. 地图数据赋能ADAS的探索与实践
  2. vb中msgbox用法
  3. 1334177-87-5,Cbz-N-amido-PEG8-acid含有Cbz保护的氨基和末端羧酸的PEG连接物
  4. WinForm c#操作Excel
  5. Web前端-JavaScript--对象
  6. CMU 15-445/645 PROJECT #1 - BUFFER POOL上(实现线程安全的LRU)
  7. 计算机打印状态错误,打印机开始打印就显示错误怎么办?
  8. 李涛Photoshop笔记之基础篇
  9. 编写高质量的代码——从命名入手
  10. 怎么查找计算机蓝牙耳机,电脑搜索不到蓝牙耳机的解决方法