#670. 奇数幻方(magicsquare)

奇数幻方(magicsquare)

题目描述

下面是一个3阶的奇数幻方。

8 1 6

3 5 7

4 9 2

它由1到32的自然数组成一个33的方阵,方阵的每一行,每一列和两个对角线上的各数字之和都相等,且等于 n(n^2+1)/2(n是方阵的行数或列数)。编程打印出n为30以内的奇数阶幻方,n由键盘输入。

奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯方)。填写方法是这样:

把1(或最小的数)放在第一行正中; 按以下规律排列剩下的n*n-1个数:

(1)、每一个数放在前一个数的右上一格;

(2)、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;

(3)、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行; (4)、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;

(5)、如果这个数所要放的格已经有数填入,处理方法同(4)。

这种写法总是先向“右上”的方向,象是在爬楼梯。 *

输入输出格式

输入

奇数n(小于30)。

输出

n行,每行n个数,表示罗伯特法填写的n阶奇数幻方。

样例

输入1

3

输出1

8 1 6
3 5 7
4 9 2

时间及空间限制

1s, 256MB.