单点时限: 2.0 sec
内存限制: 256 MB
魔方阵是一个 $n×n$($n$ 为奇数)的方阵,其元素是 $1 - n×n$ 的不同自然数。它的每一行,每一列和两个对角线上数值之和均相等,并规定 $1$ 放在最后一行的中间位置
每行一个奇数 $n (3 \leqslant n \leqslant 99)$。总共不多于 $20$ 行。
对于每一个 $n$,输出 $n$ 行的魔方阵,两个元素之间用一个空格分开。每行的最后有一个换行符。
5 7
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列)