程序设计能力实训

1070. 魔方阵

单点时限: 2.0 sec

内存限制: 256 MB

魔方阵是一个 $n×n$($n$ 为奇数)的方阵,其元素是 $1 - n×n$ 的不同自然数。它的每一行,每一列和两个对角线上数值之和均相等,并规定 $1$ 放在最后一行的中间位置

输入格式

每行一个奇数 $n (3 \leqslant n \leqslant 99)$。总共不多于 $20$ 行。

输出格式

对于每一个 $n$,输出 $n$ 行的魔方阵,两个元素之间用一个空格分开。每行的最后有一个换行符。

样例

Input
5
7
Output
9 2 25 18 11
3 21 19 12 10
22 20 13 6 4
16 14 7 5 23
15 8 1 24 17
20 11 2 49 40 31 22
12 3 43 41 32 23 21
4 44 42 33 24 15 13
45 36 34 25 16 14 5
37 35 26 17 8 6 46
29 27 18 9 7 47 38
28 19 10 1 48 39 30

提示

求 $n$ 阶魔方阵的算法:
将1放在最后一行中间一列;$ 2 - n×n $ 各数依次按下列规则存放:按45°向左下方向行走,如果行列范围超出矩阵范围,则回绕(最后一行绕到第1行,第1列绕到最后一列。例:$n=3$ 时:1在最后一行,则2应放在第1行;2在第1列,则3应放在最后一列)。如果按上述规则确定的位置上已放了一个数,或上一个数是最后一行的第1列时,则把下一个数放在上一个数的上方。

$n = 5$ 时的解法:
1(第5行;第3列)-> 2(回绕到第1行;第2列)-> 3(第2行;第1列)-> 4(第3行;回绕到第5列)->5(第4行;第4列)-> 6(下一位置已经放了1,则放在5的上面,第3行;第4列)-> 7(第4行;第3列)-> 8(第5行;第2列)-> 9(回绕到第1行;第1列)-> 10(第2行;回绕到第5列)-> 11(下一位置已经放了6,则放在10的上面,第1行;第5列)-> 12(第2行;第4列)-> 13(第3行;第3列)-> 14(第4行;第2列)-> 15(第5行;第1列)-> 16(由于15在最后一行的第1列,则放在15的上面,第4行;第1列)-> 17(第5行;回绕到第5列)-> 18(回绕到第1行;第4列)-> 19(第2行;第3列)-> 20(第3行;第2列)-> 21(下一位置已经放了16,则放在20的上面,第2行;第2列)-> 22(第3行;第1列)-> 23(第4行;回绕到第5列)-> 24(第5行;第4列)-> 25(回绕到第1行;第3列)

不限期开放

题目列表