#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.