#P1044. n阶奇数幻方

n阶奇数幻方

题目背景

幻方是一个很神奇的方阵,它的每行、每列、每条对角线的数字之和都相等。我们可以通过以下方法构建一个n阶幻方(n为奇数)。

先从1开始填第一个数字,填在第一行的中间。

-如果该数字在第一行但不在最后一列,则下一个数字写在最后一行,列数为该数字的右一列;

-如果该数字在最后一列但不在第一行,则下一个数字写在第一列,行数为该数字的上一行;

-如果该数字在第一行最后一列,则下一个数字写在该数字的正下方;

-如果该数字既不在第一行,也不在最后一列,如果该数字的右上角还未填数,则将下一个数字填在该数字的右上方,否则填在该数字的正下方。


题目描述

输入1个奇数n,按规则输出n×n的幻方。


输入格式

一个奇数n(1≤n≤20),代表幻方的阶数。

输出格式

按照样例显示n×n个正整数,每行相邻两个数之间有一个空格。


输入/输出样例

3
8 1 6
3 5 7
4 9 2
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

样例1解释

下图是填充一个3阶幻方的过程,每次新填的数用绿色表示,红色表示原本应该填的位置,但根据规则不能填。

image


说明/提示

时间1000ms,内存256MiB