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. 解决lxml不含etree模块导致scrapy startproject ***出错

    本文环境:win10(64) python3.6(64) 背景:之前已成功安装scrapy(1.4.0),但在命令行敲 scrapy startproject ***出错,错误提示:from ... ...

  2. strcpy.strcmp.strlen.strcat函数的实现

    #include <stdio.h> #include <string.h>   char *copy(char *a,char *b);//声明一个复制函数 char *ca ...

  3. Eclipse错误:Implicit super constructor ClassName is undefined for default constructor. Must define an explicit constructor

    public class Test01 { private String name; private int age; public Test01(String name){ this.name = ...

  4. UITextField成为第一响应者

    @interface CSRegisterTwoViewController ()<UITextFieldDelegate> @property (weak, nonatomic) IBO ...

  5. React Native 系列(六) -- PropTypes

    前言 本系列是基于React Native版本号0.44.3写的.在我们之前的通过props实现组件间传值的时候,大家有没有发现在父组件传递值过去,在子控件获取props的时候没有提示,那么如何能实现 ...

  6. 算法竞赛入门经典 习题2-10 排列(permutation)

    习题2-10 排列(permutation) 用1,2,3,-,9组成3个三位数 abc, def, 和ghi,每个数字恰好使用一次,要求 abc:def:ghi = 1:2:3.输出所有解.提示:不 ...

  7. mysql的内连接,外连接(左外连接,右外连接)巩固

    1:mysql的内连接: 内连接(inner join):显示左表以及右表符合连接条件的记录: select a.goods_id,a.goods_name,b.cate_name from tdb_ ...

  8. Javascript随笔2(JQuery)

    1.jQuery 语法 Tips: 通过 CDN(内容分发网络)引用JQuery:(link的引用最好放在script的引用之前) <script src="http://apps.b ...

  9. Weex的原生开发

    weex概念与特性 最形象的理解就是类似react native. Weex几大特点: 1.帮助你构建原生应用 与 Web App.HTML5 App 或 hybrid App 不同,您可以使用 We ...

  10. 自动生成AWR报告

    --自动生成AWR报告 -------------------2013/09/23   脚本代码:   #!/bin/bash   AWR_FORMAT=html NUM_DAYS=1   MAX_S ...