问题 5846 --填幻方

5846: 填幻方★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 332  解决: 264
[提交][状态][命题人:]

题目描述

 在一个N×N的正方形网格中,每个格子分别填上从1N×N的正整数,使得正方形中任一行、任一列及对角线的几个数之和都相等,则这种正方形图案就称为幻方(输出样例中展示了一个3×3的幻方)。我国古代称为河图洛书,又叫纵横图。幻方看似神奇,但当N为奇数时有很方便的填法:

1)一开始正方形中没有填任何数字。首先,在第一行的正中央填上1

2)从上次填数字的位置向上移动一格,如果已经在第一行,则移到同一列的最后一行;再向右移动一格,如果已经在最右一列,则移动至同一行的第一列。如果移动后的位置没有填数字,则把上次填写的数字的下一个数字填到这个位置。

3)如果第2步填写失败,则从上次填数字的位置向下移动一格,如果已经在最下一行,则移到同一列的第一行。这个位置一定是空的(这可太神奇了!),把上次填写的数字的下一个数字填到这个位置。

4)重复2、3步骤,直到所有格子都被填满,幻方就完成了!快来编写一个程序,按上述规则,制作一个N×N的幻方吧。

输入

输入为一个正奇数N,保证3≤N≤21

输出

输出N行,每行N个空格分隔的正整数,内容为N×N的幻方。
样例输入
Copy
3
样例输出
Copy
8 1 6
3 5 7
4 9 2

提示

来源

[提交][状态]