1 /*程序的版权和版本声明部分:
**Copyright(c) 2016,电子科技大学本科生
**All rights reserved.
**文件名:单偶数N阶魔方矩阵
**程序作用:单偶数N阶魔方矩阵
**作者:Amoshen
**完成日期:2016.11.2
**版本号:V1.0
*/
#include<iostream> using namespace std; #define MAX_SIZE 100 int main(void)
{
int m,u,n,ROW,CIE,ROW1,CIE1,i,j;//ROW为行,CIE为列,ROW1为临时行变量,CIE1为临时列变量,i,j分别表示行变量和列变量
int MAGIC[MAX_SIZE][MAX_SIZE] = {},b[MAX_SIZE][MAX_SIZE] = {},EX[MAX_SIZE][MAX_SIZE] = {}; cout << "请输入m,注意:n = 2*(2 * m + 1),即m输入1,得到一个6阶魔方矩阵"<<endl;
cout << "m = ";
cin >> m; n = *( * m + );
u = n/;
//先填充第一个u*u魔阵
ROW = ;
CIE = (u - )/; MAGIC[ROW][CIE] = ;
b[ROW][CIE] = ; for(i = ;i <= (u*u);i++)
{
ROW1 = ROW - ;
CIE1 = CIE + ; if(ROW1 < )
{
ROW1 = u - ;
}
if(CIE1 > (u - ))
{
CIE1 = ;
} if(b[ROW1][CIE1] == )
{
ROW = ROW1;
CIE = CIE1;
MAGIC[ROW][CIE] = i;
b[ROW][CIE] = ;
}
else
{
ROW = ROW + ;
if(ROW == u)
{
ROW = ;
}
MAGIC[ROW][CIE] = i;
b[ROW][CIE] = ;
}
}
//再填充第四个魔阵(右下角)
for(i = u;i < *u;i++)
{
for(j = u;j < *u;j++)
{
MAGIC[i][j] = MAGIC[i-u][j-u] + u*u;
}
}
//右上角
for(i = ;i < u;i++)
{
for(j = u;j < *u;j++)
{
MAGIC[i][j] = MAGIC[i+u][j] + u*u;
}
}
//左下角
for(i = u;i < *u;i++)
{
for(j = ;j < u;j++)
{
MAGIC[i][j] = MAGIC[i-u][j+u] + u*u;
}
}
//右上角与右下角的交换
for(i = ;i < u;i++)
{
for(j = *u-;j > (*u-m);j--)
{
EX[i][j] = MAGIC[i][j];
MAGIC[i][j] = MAGIC[i+u][j];
}
}
for(i = ;i < u;i++)
{
for(j = *u-;j > (*u-m);j--)
{
MAGIC[i+u][j] = EX[i][j];
}
}
//左上角与左下角的交换
for(i = ;i < u;i++)
{
if(i == (u-)/)
{
for(j = ;j <= m;j++)
{
EX[i][j] = MAGIC[i][j];
MAGIC[i][j] = MAGIC[i+u][j];
}
}
else
{
for(j = ;j < m;j++)
{
EX[i][j] = MAGIC[i][j];
MAGIC[i][j] = MAGIC[i+u][j];
}
}
}
for(i = ;i < u;i++)
{
if(i == (u-)/)
{
for(j = ;j <= m;j++)
{
MAGIC[i+u][j] = EX[i][j];
}
}
else
{
for(j = ;j < m;j++)
{
MAGIC[i+u][j] = EX[i][j];
}
}
} cout << n << "阶魔方矩阵:" <<endl; for(i = ;i < *u;i++)
{
for(j = ;j < *u;j++)
{
cout << MAGIC[i][j] <<'\t';
}
cout <<endl;
} return ;
}

原理

因为是单偶数n = 2*(2*m + 1),如果把整个魔方矩阵均分为4份,每份都是奇数阶,利用奇数阶的算法来填充。

(如图)

完成后的效果图

把最右边m-1列中B与C对应相交换

A的中间一行,从第二列开始,m格与对应D交换,其余从最左边开始m格与D对应交换

交换后的最终效果图

【C++小白成长撸】--(续)单偶数N阶魔方矩阵的更多相关文章

  1. 【C++小白成长撸】--(续)双偶数N阶魔阵

    原理: 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4) 每个魔阵的对角线都标为"-1",其余位置标为"0" 从第一个位置(a[0][0])从左到右,从 ...

  2. 【C++小白成长撸】--N阶幻方(魔阵)矩阵

    解决方法:1.第一个元素放在第一行中间一列 2.下一个元素存放在当前元素的上一行.下一列. 3.如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下一列的时 ...

  3. 【C++小白成长撸】--矩阵乘法程序

    矩阵乘法是大学矩阵课程中,相比矩阵加减法比较困难的部分. 矩阵乘法的原理: 矩阵乘法在代码中实现 得到目标矩阵的一个元素,涉及两个求和符号,一个求和符号一个for循环,两个求和符号两个for循环,再加 ...

  4. 【ACM小白成长撸】--贪婪法解硬币找零问题

    question:假设有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱.按照贪婪法的思想,需要不断地使用面值最大的硬币.如果找零的值小于最大的硬币值,则尝试第二 ...

  5. 【小白成长撸】--Fibonacci

    /*程序的版权和版本声明部分: *Copyright(c) 2016,电子科技大学本科生 *All rights reserved. *文件名:Fibonacci *程序作用:计算菲薄拉稀数列 *作者 ...

  6. 【ACM小白成长撸】--计算单词个数

    我判断单词个数的方法,根据空格‘ ’的个数 分情况 当没有单词的时候 判断第一个符号,即a[0] == ‘\0’时,赋值给存储个数的数组 当遇到空格时,只有前面一个字符不是空格字符,后面一个字符不是空 ...

  7. 【小白成长撸】--多项式求圆周率PI

    /*程序的版权和版本声明部分: *Copyright(c) 2016,电子科技大学本科生 *All rights reserved. *文件名:多项式求PI *程序作用:计算圆周率PI *作者:Amo ...

  8. 【小白成长撸】--链栈(C语言版)

    // 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...

  9. 【小白成长撸】--顺序栈(C语言版)

    // 顺序栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"//test1.0--栈表仅限Int类型 #include <stdio. ...

随机推荐

  1. POJ 2386 Lake Counting (简单深搜)

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...

  2. 抵制克苏恩[Lydsy2017年4月月赛]

    题目描述 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 30 点血量的英 ...

  3. 页面发送请求到后台报错“Empty or invalid anti forgery header token.”问题解决

    在页面向后台发送请求时,报如上图的错误的解决办法: 在WebModule.cs类中的PreInitialize方法中加 Configuration.Modules.AbpWeb().AntiForge ...

  4. mongodb分片部署

    Mongodb 分片部署 配置mongodb集群,比如 在3个server上配置 3 shard的Mongodb集群: 架构: 1.每片数据需要3个mongod server,2个为主从数据节点:1个 ...

  5. vue指令v-html示例解析

    更新元素的innerHTML,不会作为vue模板编译,可用组件来代替. 在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 xss攻击.只在可信内容上使用 v-html,永不用在用户提交的内容 ...

  6. Java 加载、链接、初始化

    JVM 动态地加载.连接.初始化类或接口(在本文之后的篇幅中,我将使用"类"来表示"类和接口").这里我先贴上 Java 虚拟机规范的原文: Loading i ...

  7. MAC下安装MAMP的PHPredis扩展

    下载phpredis扩展安装包.git clone https://github.com/nicolasff/phpredis.git: 解压后,进入该目录: 依次执行以下操作完成安装: /Appli ...

  8. 前端到后台ThinkPHP开发整站(6)

    今天终于把整个后台管理系统弄好了,其实没什么难点,只是作为一个Thinphp学习的练手项目,这个项目,现在还只能算是做了一半,还有前台展示方面的功能没有完成.先过一遍后台的功能吧! 1.首页 2.菜单 ...

  9. MYSQL updatexml报错注入

    首先了解下updatexml()函数 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为X ...

  10. php创建多级目录完整封装类操作

    创建多级目录函数中调用创建指定下的指定文件的函数: public function create_dir($dir,$mode=0777) { return is_dir($dir) or ($thi ...