#P0185. [经开区2025] 幻方芯片(matrix)

[经开区2025] 幻方芯片(matrix)

【背景】

工厂把订单利润再次投入研发,研制出一块“幻方加密芯片”,用于保护学生隐私数据。芯片启动需要一枚 M×M 的奇阶幻方作为动态密钥。幻方是一个神奇的 M×M 矩阵(M 为奇数),它的每行、每列与对角线上的数字之和都相同。

【任务】

我们可以通过以下方法构建一个幻方:

  • 第一个数字写在第一行的中间;

  • 下一个数字,都写在上一个数字的右上方(即行减 1,列加 1);

  • 特殊情况处理:

  • . 如果该数字在右上角的位置,或者该数字的右上方已有数字,则下一个数字写在该数字的下方(即行加 1,列不变);

  • . 否则如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列;

  • . 否则如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行。

【输入格式】

从文件 matrix.in 中读取数据。输入一个数字 N,表示要构造的幻方大小为 (2N−1)×(2N−1)。

【输出格式】

输出到 matrix.out 中。输出按上述方法构造的幻方矩阵,每一行的数字用空格隔开。

【输入输出样例】

样例输入 1

3

样例输出 1

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% 的数据:N ≤ 20。