是一道简单的模拟题,但是如果不细心的话容易写错东西
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner as=new Scanner(System.in);
int n=as.nextInt();
int[][] a=new int[n][n];
int h=0;
int l=(int)(Math.ceil(n/2));
a[h][l]=1;//填入1
for(int i=2;i<=n*n;i++) {
// 若K-1在第一行但不在最后一列,则将K填在最后一行,K-1所在列的右一列;
if(h==0 && l!=n-1) { a[n-1][l+1]=i; h=n-1; l++; }
// 若K-1在最后一列但不在第一行,则将K填在第一列,K-1所在行的上一行;
else if (l==n-1 && h!=0 ) { a[h-1][0]=i; h--; l=0; }
// 若K-1在第一行最后一列,则将K填在K-1的正下方;
else if (h==0 && l==n-1){ a[h+1][l]=i; h++; }
// 若K-1既不在第一行,也不在最后一列,如果K−1的右上方还未填数,则将K填在K−1的右上方,否则将i填在K-1的正下方
else if (h!=0 && l!=n-1) {
if(a[h-1][l+1]==0) { a[h-1][l+1]=i; h--; l++; }
else { a[h+1][l]=i; h++; }
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}