#335. 奇数幻方

奇数幻方

背景故事

幻方是一个很神奇的 n×nn\times n 矩阵,它的每行、每列、每个对角线,加起来的数字和都相等,都等于 n×(n2+1)/2n\times(n^2 + 1) / 2。 例如 3×33\times3 幻方:

8 1 6 
3 5 7 
4 9 2

对于奇数幻方的构造,有一种简单方法称之为“楼梯法”:

  1. 11(最小的数字)写在第一行的中间。
  2. 下一个数字,都写在当前数字的右上方:
  • 如果下个坐标上越界,则放在最后一行,列数为当前数字的右一列

    • 假设 N=3N=3, 当前数字 a[1][2]=1a[1][2] = 1, 则下一个数字在 a[3][3]=2a[3][3] = 2
  • 如果下个坐标右越界,则放在第一列,行数为该数字的上一行

    • 当前数字 a[3][3]=2a[3][3] = 2, 则下一个数字在 a[2][1]=3a[2][1] = 3
  • 如果当前数字在右上角,或其右上方已有数字,则放在当前数字的下方

    • 当前数字 a[2][1]=3a[2][1] = 3,右上已经有 a[1][2]=1a[1][2] = 1,则下一个数字在 a[3][1]=4a[3][1] = 4

题目描述

编写程序,用楼梯法构造 nn 阶幻方。

输入格式

共一行一个整数 nn,表示 nn 阶幻方

输出格式

输出 nn 阶幻方

样例

5
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

数据范围

100%100\% 的数据:n1000,nn\leq1000,n 为奇数