package com.lesson2;
import java.util.Scanner;
/*
* 奇数阶幻方
* 罗伯法口诀:1居上行正中央,依次斜填右上方,上方出格下边放,右边出格左边放,排重便在下格放,右上同出一个样。具体填法如下:
8 1 6
3 5 7
4 9 2
1写在上行正中间;2斜填右上方时上方出格就写在同列的下边;
2的右上方填3时右边出格,3就写在同行的左边;
3的右上方是1排重了,4就写在3的下面;
依次斜填写好5、6;
6的右方上方同时出格,7就写在6的下边;
7的右上方填8时右边出格,8就写在同行的左边;
8的右上方填9时上方出格,9就写在同列的下边。
*/
public class MagicSquare
{
public static void main(String[] args)
{
System.out.println("请输入幻方的阶数:");
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int mat[][]=new int [size][size];
int i=0;
int n=size;
int j=n/2;
// 这里的算法设计非常重要;
for(int k=1;k<=n*n;k++)
{
mat[i][j]=k;
if(k%n==0)
{
i=(i+1)%n;
}
else
{
i=(i-1+n)%n; j=(j+1)%n;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
System.out.print(mat[i][j]+"\t");
System.out.println();
}
}
}