【完成题目 2】魔方阵
【问题描述】
魔方阵是一个古老的智力问题,它要求在一个 m*n 的矩阵中填入 1~m2 的数字(m
为奇数),使得每一行、每一列、每条对角线的累加和都相等,如下图所示:
( a ) 三 阶 魔 方
阵 (b)五阶魔
方阵
【基本要求】
1 、 输 入 魔 方 阵 的 行 数
m,要求 m 为奇数,程序对
所输入的 m 作简单的判断,
如 m 有错,能给出提示信息;
2、实现魔方阵;
3、输出魔方阵。
【算法设计】
算法思想:输入一个数字 n(1≤n≤99),则输出对应的 n 阶魔方阵,并输出每一行、
每一列、每条对角线上各个数字累加和。若输入数字 n 超出要求范围,则提醒用户重新输
入 n。当输入数字有效时,输出魔方阵结果。
算法设计分析:首先,把 1 填在第一行的正中间。然后,若数 k 填在第 i 行第 j 列的格
子中,那么 k+1 应填在它的左上方,即 i-1,j-1;如果左上方没有格子,若 i-1=0,那么 k+1 填在
第 n 行第 j-1 列的格子中;若 j-1=0,那么 k+1 填在第 i-1 行第 n 列的格子中 ;若 i-1=0,j-1=0,那么
k+1 填在第 n 行第 n 列的格子中。再次,若按上述方法找到的格子都已经填过了数,那么,
数 k+1 填在第 k 个数的正下方。具体实现时:用 i<0,j<0 表明格子不存在。找到的格子都已
经填过了数的这类数有个特点,那就是可以整除 n,即 k%n=0。
【运行结果】