双偶幻方的c语言算法,任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。...
幻方分为3类。奇阶幻方(奇数)、双偶幻方(能够被4整除,如8,12,16……)、单偶幻方(4m+2形式,如6,10……),构造算法各不相同。
下面的程序中,奇阶幻方的构造算法为Merzirac法。双偶幻方的构造算法为Spring法。单偶幻方的构造算法为Strachey法。
奇数幻方:
在第一行居中的方格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向下移一格继续填写。
双偶幻方:
(1) 先把数字按顺序填。然后,按4*4把它分割成2*2个小方阵 。
(2) 每个小方阵对角线上的数字,换成和它互补的数。
单偶幻方:
各行列对角线的和公式为:sum=n*(n^2+1)/2 n为阶数
代码如下:
#include
#include
#include
using namespace std;
int matrix[99][99] = {0};
//生成奇数幻方
void CreateOddMagicSquare(int n)
{
int x=0,y,mun =1;
y=n/2;
while ( mun <= n*n )
{
matrix[x][y] = mun;
//通过x0、y0检测右上的是否已经填入数字
int x0=x;
int y0=y;
x0--;
y0++;
//超界处理
if(x0<0)
x0+=n;
if(y0 == n)
y0= n - y0;
if(0 == matrix[x0][y0] )
{
x = x0;
y = y0;
}
else
{
//若有数字填入之前数字的下方
x++;
if(x == n)
x = x-n;
}
mun ++;
}
}
//生成双偶幻方
void CreateDoubleEvenMagicSqure( int n )
{
int num = 1;
//从1到n的平方依次赋值
for(int i=0;i
for(int j=0;j
matrix[i][j] = num++ ;
//小正方形的对角线上的数字取其补数
for(int i=0;i
for(int j=0;j
{
if(i%4==0 && abs(i-j)%4 == 0)
for(int k=0;k<4;k++)
matrix[i+k][j+k] = abs( n*n +1 - matrix[i+k][j+k] );
else if (i%4==3 && (i+j)%4 == 3)
for(int k=0;k<4;k++)
matrix[i-k][j+k] = abs( n*n +1 - matrix[i-k][j+k] );
}
}
//生成单偶幻方
void CreateSingleEvenMagicSqure(int n)
{
int k = n/2;
CreateOddMagicSquare(k);
//赋初值,左上最小,右下其次,右上再次,左下最大
for(int i=0;i
for(int j=0;j
{
matrix[i+k][j+k] = matrix[i][j] + k*k;
matrix[i][j+k] = matrix[i][j] + k*k*2;
matrix[i+k][j] = matrix[i][j] + k*k*3;
}
//公式 n=4m+2
int m = (n-2) / 4;
//交换x方向正中行的从左至右m-1个
for(int i=0;i
{
int buf = matrix[k/2][i];
matrix[k/2][i] = matrix[k/2+k][i];
matrix[k/2+k][i] = buf;
}
int buf = matrix[k/2][k/2];
//以及正中间的数
matrix[k/2][k/2] = matrix[k/2+k][k/2];
matrix[k/2+k][k/2] = buf;
//交换除x正中间行的其他行对应数字m个
for(int i=0;i
for(int j=0;j
{
if(i != k/2)
{
int buf = matrix[i][j];
matrix[i][j] = matrix[i+k][j];
matrix[i+k][j] = buf;
}
}
//交换最右边m-1个数字
for(int i=0;i
for(int j=n-1;j>n-1-(m-1) ; j--)
{
int buf = matrix[i][j];
matrix[i][j] = matrix[i+k][j];
matrix[i+k][j] = buf;
}
}
//幻方正确检查
bool Check(int n)
{
int sum = (n*(n*n+1))/2;
int SumA=0,SumB=0;
for(int i=0;i
{
for(int j=0;j
SumA += matrix[i][j];
if(SumA != sum)
return false;
SumA = 0;
}
for(int i=0;i
{
for(int j=0;j
SumA += matrix[j][i];
if(SumA != sum)
return false;
SumA = 0;
}
for(int i=0;i
{
SumA+=matrix[i][i];
SumB+=matrix[i][n-i-1];
}
if(SumA!=sum||SumB!=sum)
return false;
return true;
}
int main()
{
int n;
cin>>n;
if(n%2!=0)
CreateOddMagicSquare(n);
else if (n%4 == 0)
CreateDoubleEvenMagicSqure(n);
else if (n%2 == 0)
CreateSingleEvenMagicSqure(n);
for(int i=0;i
{
for(int j=0;j
cout<
cout<
}
if(!Check(n))
cout<
else
cout<
system("pause");
return 1;
}
双偶幻方的c语言算法,任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。...相关推荐
- 双偶幻方的c语言算法,单偶阶、双偶阶幻方的巧妙填法
单偶阶.双偶阶幻方的巧妙填法 单偶阶.双偶阶幻方的巧妙填法 人气:150 ℃时间:2019-12-07 19:18:09 优质解答 一.双偶幻方的解法 能被4整除的n阶幻方叫双偶幻方,如8阶.12阶. ...
- 任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。
幻方分为3类.奇阶幻方(奇数).双偶幻方(能够被4整除,如8,12,16--).单偶幻方(4m+2形式,如6,10--),构造算法各不相同. 下面的程序中,奇阶幻方的构造算法为Merzirac法.双偶 ...
- 重温c语言 谭浩强 输出魔方阵 目前只做了基数魔方 以及 双偶幻方,单偶同理
基数魔方阵 1>第一行中间位取值1 2>然后 后面的n*n -1 个数按以下规则 下一个数是前一个数的 行-1 列 +1 若是行是0 则为n-1:若列是n-1,则为0:若定位后的pos ...
- C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)
C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法) 结果图如下 : 代码如下: //----- 任意两个矩阵相乘 # include <stdio.h> int main ...
- matlab图像剖线,一种在等值线图上任意截取剖面的Matlab语言算法
第25卷 第3期 2003年8月 物探化探计算技术 V ol 125N o .3 A ug .2003COM PU T I N G T ECHN I Q U ES FOR GEO PH YS I CA ...
- c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
原标题:单片机常用的14个C语言算法,要熟记在心哦! 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么 ...
- 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法
Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...
- 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt
C语言算法与数据结构.ppt 第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解.历次试题分值在0 ...
- c语言中闰年的流程图_C语言-算法与流程图
<C语言-算法与流程图>由会员分享,可在线阅读,更多相关<C语言-算法与流程图(22页珍藏版)>请在人人文库网上搜索. 1.目录,第一章 绪论 第二章 算法与流程图 第三章 数 ...
- C语言-输入任意多个数字,存到整型数组,支持任意间隔符,同时支持输入字母存到字符数组中
第一次在CSDN上写博客- 记录一下想了有那么久的,这串代码 起因是做应用密码学的作业时,有Vigenere密码的加密解密.仿射密码加密解密.Playfair算法.Hill密码 因为数据量比较大,要把 ...
最新文章
- 【imx6】libipu.so.0说明
- 广东省哈工大(深圳)赛区赛事活动安排
- JAVA 设计模式 : 状态模式
- 帝国cms php点击删除,帝国CMS删除内容非本站链接的方法(非插件)
- 修复IE主页被篡改劫持的方法之一:自定义xxx.reg文件
- Macbook 2021 M1pro 安装 SentencePiece
- 设置vs2107背景图片
- 8本必读关于人工智能伦理问题、社会价值及影响书籍推荐
- 【林轩田】机器学习基石(九)——线性回归
- 起始2021-01-15
- uniapp-上传图片、上传视频
- ParaView整体介绍
- php在线打包(hacklog修改版),wordpress配置记录
- mysql lag和lead_Oracle的LAG和LEAD分析函数
- Pyramid 简介
- 南京邮电大学微型计算机原理与接口技术答案,微型计算机原理与接口技术南京邮电大学...
- LSM 树(Log-Structured Merge-Tree) 原理
- python constrain_python约束 – 约束金额
- RFID基础---频率、卡类型
- 圆与圆的位置关系题目含答案_中考总复习:圆的专题复习-圆的性质及与圆有关的位置关系考点分析...