在井字型的格局中(奇数格局),放入数字,使得每行每列以及斜对角线的和都相等
经验规则:从1开始按顺序逐个填写,1放在第一行的中间位置,下一个数往右上角45度
处填写。如果单边越界则按头尾相接地填;如果有冲突,则填在刚才位置的底下一格
如果双边越界,则填在刚才位置的底下一格
代码的实现:
import java.util.Scanner;
public class NinePalace {
public static void main(String[] args) {
// 用户来输入九宫格的行列数
Scanner scn = new Scanner(System.in);
int N = Integer.parseInt(scn.nextLine());
// 创建 N*N的二维数组
int[][] a = new int[N][N];
//这个二维数组中元素值都为默认值0
// 定义当前放数字的行和列
int row = 0; // 行,初始位置
int col = N / 2; // 列,初始位置,N/2即为中间位置
for (int i = 1; i <= N * N; i++) // i为要放到九宫格的数字
{
a[row][col] = i;
row--;// 往45度方向
col++;
if (row < 0 && col > N - 1) { row = row + 2; col--; }
else if (row < 0) { row = N - 1; }
else if (col > N - 1) { col = 0; }
else if (a[row][col] != 0) { row = row + 2; col--; }
}
//输出
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}
}