【C++小白成长撸】--(续)单偶数N阶魔方矩阵
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阶魔方矩阵的更多相关文章
- 【C++小白成长撸】--(续)双偶数N阶魔阵
原理: 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4) 每个魔阵的对角线都标为"-1",其余位置标为"0" 从第一个位置(a[0][0])从左到右,从 ...
- 【C++小白成长撸】--N阶幻方(魔阵)矩阵
解决方法:1.第一个元素放在第一行中间一列 2.下一个元素存放在当前元素的上一行.下一列. 3.如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下一列的时 ...
- 【C++小白成长撸】--矩阵乘法程序
矩阵乘法是大学矩阵课程中,相比矩阵加减法比较困难的部分. 矩阵乘法的原理: 矩阵乘法在代码中实现 得到目标矩阵的一个元素,涉及两个求和符号,一个求和符号一个for循环,两个求和符号两个for循环,再加 ...
- 【ACM小白成长撸】--贪婪法解硬币找零问题
question:假设有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱.按照贪婪法的思想,需要不断地使用面值最大的硬币.如果找零的值小于最大的硬币值,则尝试第二 ...
- 【小白成长撸】--Fibonacci
/*程序的版权和版本声明部分: *Copyright(c) 2016,电子科技大学本科生 *All rights reserved. *文件名:Fibonacci *程序作用:计算菲薄拉稀数列 *作者 ...
- 【ACM小白成长撸】--计算单词个数
我判断单词个数的方法,根据空格‘ ’的个数 分情况 当没有单词的时候 判断第一个符号,即a[0] == ‘\0’时,赋值给存储个数的数组 当遇到空格时,只有前面一个字符不是空格字符,后面一个字符不是空 ...
- 【小白成长撸】--多项式求圆周率PI
/*程序的版权和版本声明部分: *Copyright(c) 2016,电子科技大学本科生 *All rights reserved. *文件名:多项式求PI *程序作用:计算圆周率PI *作者:Amo ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
- 【小白成长撸】--顺序栈(C语言版)
// 顺序栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"//test1.0--栈表仅限Int类型 #include <stdio. ...
随机推荐
- Typescript变量声明
let 和 const 是 javascript 里面最新的变量声明方式,let 与 var 很相似,而 const 是 let 的增强,能阻止对一个变量的再次赋值. var 声明 弱类型:var 声 ...
- linux--软件包管理工具
linux平台软件包管理: RPM/DPKG 两大阵营简介 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM ...
- MySQL for Mac 安装和基本操作
一.安装mysql 1.mysql下载地址http://dev.mysql.com/downloads/mysql/我的机器是mac 10.8的;所以使用mysql-5.6.10-osx10.7-x8 ...
- shell脚本报错:"[: =: unary operator expected"
shell脚本报错:"[: =: unary operator expected" 在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == "OK&q ...
- MySQL索引篇
innodb索引概念 总结记录下innodb的索引概念,以备查看 innodb索引分类: 聚簇索引(clustered index) 1) 有主键时,根据主键创建聚簇索引 2 ...
- Android绘画板(普通绘画模式和缩放平移绘画模式)
ScaleSketchPadDemo 项目地址: demo apk体验下载 demo2 apk体验下载 用法: 进入项目根目录:https://github.com/ShaunSheep/ScaleS ...
- 《Java从入门到放弃》入门篇:hibernate查询——HQL
不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...
- SQL语句查询某字段不同数据的个数(DISTINCT 的使用)
今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT COUNT(DISTINCT VchReg) from VF ; 其中 ...
- Java中几种常量池的区分
转载自:https://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的内存分配中,经常听到很多关于常量 ...
- CSS 学习笔记 - Flex 布局
传统布局方式的局限性 传统的网页布局方式,采用 display + position + float 的方式来实现.这种方式,无法实现一些复杂的布局,并且在实现某些布局时,会有一些局限性. 比如,最常 ...