Problem1887--【高级语言程序设计】7.10 奇数阶幻方矩阵生成

1887: 【高级语言程序设计】7.10 奇数阶幻方矩阵生成

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 3  Solved: 2
[Submit] [Status] [Web Board] [Creator:]

Description

所谓的 n 阶魔方矩阵是指把1n×n的自然数按一定方法排列成 n×n的矩阵,使得任意行、任意列以及两个对角线上的数字之和都相等(已知 n 为奇数,假设 n 不超过15)。请编写一个程序,实现奇数阶魔方矩阵的生成。要求先输入矩阵的阶数 n(假设 n<=15),然后生成并输出 n×n 阶幻方矩阵。

Input

输入一个整数 n ,(n<=15)。

Output

输出 n 的奇数阶幻方矩阵,输出时请采用 %4d,一个数字占4位。

Sample Input Copy

5

Sample Output Copy

  17  24   1   8  15
  23   5   7  14  16
   4   6  13  20  22
  10  12  19  21   3
  11  18  25   2   9

HINT

奇数阶魔方矩阵的生成算法如下: 第1步:将1放入第一行的正中处。 第2步:按照如下方法将第 i 个数( i 从 2 到 n×n )依次放到合适的位置上。如果第i-1个数的右上角位置没有放数,则将第 i 个数放到前一个数的右上角位置。如果第 i-1 个数的右上角位置已经有数,则将第 i 个数放到第 i-1 个数的下一行且列数相同的位置,即放到前一个数的下一行。 注意,计算右上角位置的行列坐标时,可采用对 n 求余的方式来计算,即当右上角位置超过矩阵边界时,要把矩阵元素看成是首尾衔接的。
#include <stdio.h>
#define N 15
void InitializerMatrix(int x[][N], int n);
void PrintMatrix(int x[][N], int n);
void GenerateMagicSquare(int  x[][N], int n);
int main(void)
{
    //=======begin=======




    //========end========
}
//函数功能:生成n阶幻方矩阵
void GenerateMagicSquare(int  x[][N], int n)
{
    //=======begin=======






    //========end========
}
//函数功能:输出n阶幻方矩阵
void PrintMatrix(int x[][N], int n)
{
    //=======begin=======




    //========end========
}
//函数功能:初始化数组元素全为0,标志数组元素未被占用
void InitializerMatrix(int x[][N], int n)
{
    //=======begin=======




    //========end========
}

Source/Category