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