幻方是在一个n*n的矩阵中放置从1到n 2 的数,每个数只出现一次,并且在每行,每列及对角线的和是一样的。 这个问题的焦点是奇数幻方,它意味着n是奇数,你将使用下面的方法来构造奇幻方阵,最基本的规律是向右上角移动,下面让我们一步一步进行。
1、让我们开始在最上面的一行的中间放上1(在这个例中n=3) 你的任务是写一个程序去找出哪个数会被放到右下角在n幻方中,当然,你可以使用上面的规律去构造幻方。
2、我们假定最后一行是第一行的上一行,向右上角移动意思是向上移一行并且向右移一列,因此2就放置到最后一行的最后一列上。
3、同样,在最右边的列再向右移时,我们认为第1列为其最右边的列,因此3必须放置到最左边的一列上,并且向上移一行.
4、当向右上角放数时,该处已放置了数该怎办呢?当这种情况发生时,这个规律就在该次放弃一次,向右上角移的规律用直接向下放置的来代替,因此4会被放到3的下面。
5、然后:
6、6在最右上角,7正常会放到最后一行上,又因6是最右边,7正常位置应该是最左边,这个位置是左下角,这个位置方法放置7,不幸的是,这里已放置了4,因此7只能入到6的下面。
8 1 6
3 5 7
4 9 2
Input
输入n(n<100)
当输入为0时结束。
Output
对每个n,你需输出对应的幻方。每行两个数字之间有一个空格
Sample Input
3
5
0
Sample Output
8 1 6
3 5 7
4 9 2
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