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. Zabbix监控IO

    导入模板 configuration->templates->import,选择你需要导入的模板文件 #zabbix_agentd配置 # iostat #磁盘读的次数 UserParam ...

  2. 一个UITableViewCell的简单动画效果

    实现下面UITableViewDelegate的方法: forRowAtIndexPath:(NSIndexPath *)indexPath{ CATransform3D rotation; rota ...

  3. 虚拟机安装linux系统不能上网解决方法

    周末闲来无事,用虚拟机安装了centos6.5系统,安装成功后发现不能连接网络,然后我就一脸蒙蔽了,无奈之下,只能百度查找问题,幸运的是,我还真找到了解决的方法,根据教程一步步操作,成功了!为了避免以 ...

  4. jQuery.ajax success 与 complete 区别

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 天天用,不知所以然: $.ajax({       type: "post",       u ...

  5. 【NO.13】Jmeter - 在Linux整理和计算测试结果

    我们现在描述的是:在Linux系统使用Jmeter执行性能测试. 所以当执行完测试以后,就要计算一下测试结果,反馈给开发人员嘛. 在Linux系统使用Jmeter执行性能测试都包含哪些步骤,来,回顾一 ...

  6. NOIP 2002 提高组 字串变换

    题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...

  7. 截取TableView生成图片

    先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图. 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显 ...

  8. html&css笔记(1)

    本文是在阅读<head first html and css>时记下的一些需要注意的地方. 第3章 浏览器不会显示html文本中的空白符和换行. 标签的属性用来定义一个元素.p53 hre ...

  9. 【Tomcat】重新獲得war包

    Extract war in tomcat/webapps #!/bin/bash #----------------------------------------------- # FileNam ...

  10. php Yii2 报错unexpected '}'

    报错unexpected '}'一般是缺少":"导致的