其实不难按照给的条件去模拟就好了,都是需要注意最后一个判断那里,如果右上方位置出界了是不行的。同时h-1是>=0;l+1是<=N的。如果不等于的话,小数字是可以跑出来的,但是稍微大点的就会有点错误。
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int h,l;
int a[][]=new int[40][40];
a[0][N/2]=1;h=0;l=N/2;
for (int i = 2; i <=N*N; i++) {
if (h==0 && l!=N-1) {
a[N-1][l+1]=i;
h=N-1;
l++;
}else if (h!=0 && l==N-1) {
a[h-1][0]=i;
h--;
l=0;
}else if (h==0 && l==N-1) {
a[h+1][l]=i;
h++;
}else if (h!=0 && l!=N-1) {
if (h-1>=0 && l+1<=N &&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();
}
}
}