一、分析

令n=3,以3x3的魔方矩阵为例,可以看到:

1、填充数字是从1~n*n的连续整数(回答程序边界在哪里的问题);

2、第一个元素1的位置在第0行第1列,即matrix[0][n/2](回答程序从何处开始的问题);

3、其他元素(回答如何根据当前位置,确定下一个位置的问题):

1)下一个填充位置为当前位置的上一行,下一列,如果当前位置行标为0,则下一个位置行标为n-1=2,如果当前位置列标为n-1=2,则下个元素列标为0;那么在这里,就构成了n=3个数字的循环结构,可以采用取余的方式,省去很多if、else的判断。即:i = (i-1+n)%n,j = (j+1+n)%n,左侧i、j表示下一个位置,右侧表示当前位置。

2)如果第(i-1+n)%n个位置已经占用,则向下直到找到未被填充的位置,作为下一个元素的位置。

二、程序设计

1、准备

  • num = 1;
  • 一个n*n矩阵matrix[n][n],初始元素全为0;
  • 两对坐标(a,b)、(c,d),分别代表当前位置和下一个位置,a=0,b=n/2;

2、步骤

  • (c,d)保存当前坐标;
  • a = (a-1+n)%n,  b = (b+1+n)%n 寻找下一个位置,如果matrix[a][b] != 0,从上一个位置向下寻找(a=++c),直到找到matrix[a][b] = 0的位置;
  • matrix[a][b] = num++;
  • 直到num=n*n,程序结束;

三、代码

void PrintMagicMatrix(int n) {if (n % 2 == 0) {return;}int array[n][n], num = 1, a = 0, b = n / 2, c, d;//初始化矩阵memset(array, 0, sizeof(int) * n * n);array[a][b] = num++;while (num <= n * n) {//e、f记录上一个点的位置c = a;d = b;a = (a + n - 1) % n;b = (b + n + 1) % n;while (array[a][b] != 0) {a = ++c;b = d;}array[a][b] = num++;}for (int k = 0; k < n; ++k) {for (int l = 0; l < n; ++l) {printf("%3d", array[k][l]);}printf("\n");}}

矩阵2-打印魔方矩阵(非常简单)相关推荐

  1. 蛇形矩阵 java_Java打印蛇形矩阵

    具体的题目名字忘记了,之前记得有个算法题目,根据给出的整数打印有规律的矩阵. 当n=3: 1 2 3 8 9 4 7 6 5 当n=4: 1 2 3 4 12 13 14 5 11 16 15 6 1 ...

  2. n阶魔方的构成方法C语言,穷举法打印n阶魔方矩阵

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //   穷举法打印n阶魔方矩阵 n <= 10 #include #include int A[ 11 ][ 11 ]; bool Flag[ 1 ...

  3. 用c语言验证5阶魔方矩阵,穷举法打印n阶魔方矩阵

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //   穷举法打印n阶魔方矩阵 n <= 10 #include #include int A[ 11 ][ 11 ]; bool Flag[ 1 ...

  4. 任意阶幻方(魔方矩阵)C语言实现

    魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...

  5. 【几种特殊的矩阵:对角矩阵、上下三角矩阵、正态分布随机矩阵、魔方矩阵、希尔伯特矩阵、托普利兹矩阵】

    (这两个最不特殊了,线代中学过不过有点忘) 1.对角矩阵:       对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵,常写为diag(a1,a2,...,an) .对 ...

  6. Matlab编程与数据类型 -- 奇数阶魔方矩阵的编程

    本微信图文详细介绍了利用Matlab实现奇数阶魔方矩阵的编程.

  7. Matlab与线性代数 -- 魔方矩阵

    本图文主要介绍了如何利用Matlab实现魔方矩阵.

  8. Python实现打印螺旋矩阵功能的方法

    Python实现打印螺旋矩阵功能的方法 本文实例讲述了Python实现打印螺旋矩阵功能的方法.分享给大家供大家参考,具体如下: 一.问题描述 输入N, 打印 N*N 螺旋矩阵 比如 N = 3,打印: ...

  9. Java黑皮书课后题第8章:**8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是1或0的行、列和对角线

    **8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行.整列或者对角线都是1或0的行.列和对角线 题目 题目描述与运行示例 破题 代码 题目 ...

  10. Java黑皮书课后题第8章:*8.10(最大的行和列)编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,分别找到第一个具有最多1的行和列

    *8.10(最大的行和列)编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,分别找到第一个具有最多1的行和列 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 8.10(最大 ...

最新文章

  1. JS里的居民们7-对象和数组转换
  2. C/C++中的NULL讨论和总结
  3. Centos 配置mailx使用外部smtp发送邮件
  4. 文巾解题 183. 从不订购的客户
  5. java remote desktop_Remote Desktop
  6. sql server 2012远程链接的方法及步骤
  7. getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例
  8. python重命名文件夹下所有文件_Python3.4.3重命名当前文件夹下的文件
  9. SPFA ----模板 O(kE) (k一般不超过2)
  10. php sql慢查询,一个用户SQL慢查询分析,原因及优化_MySQL
  11. 敏捷 - #7 原则:工作软件是进度的主要衡量标准 ( #7 Agile - Principle)
  12. Mapxtreme使用心得
  13. 马科维茨投资组合有效集、最优投资组合
  14. 十进制和二进制之间的转换
  15. 【自用】图像算法、计算机视觉面试问题及答案1.0
  16. linux下容器find函数,你知道Linux系统中find命令的使用方法吗?
  17. ftp服务器的搭建与使用
  18. 苹果在印度市场表现不佳 落后诺基亚三星RIM
  19. Android 之路20---Java基础14
  20. 知识蒸馏论文学习(同济子豪兄)

热门文章

  1. SQL SERVER 2012/2014 序列号密钥
  2. java日期格式化返回date_Java日期时间格式化操作DateUtils 的整理
  3. 关于Windows汇总累积更新的认识误区和正确的使用方式
  4. 软件测试记录表模版,简单软件测试报告模板.doc
  5. 如何建立复杂城市排水系统模型?基于SWMM与城市内涝一维二维耦合模型的复杂排水系统建模/城市排涝/海绵城市技术
  6. Kindle Fire 刷机至Android 4.2.2
  7. 记录一些比较常用的简单jsp模板
  8. Idea利用JSP模板设置统一路径(basePath)
  9. 使用 jom 代替 nmake
  10. goeasy java_Java GoEasy 实现服务端推送和Web端推送