奇数阶构造:
一居上行正中央:数字 1 放在首行最中间的格子中;
依次斜填切莫忘:向右上角斜行,依次填入数字;
上出框时向下放:如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中;
右出框时向左放:同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中;
排重便在下格填:如果数字 n右上的格子已被其它数字占领,就将 n+1 填写在 n下面的格子中;
右上排重一个样:如果朝右上角出界,和上面重复的情况做同样处理。
import java.util.Scanner;
public class Java_4 {
private int[][] a;
private int j ,i ,sum = 1;
private int N,n;
public Java_4(int n){
N = n;
this.n = n;
N=N-1;
a = new int[n][n];
}
public void jiSuan(){
i = 0; j=n/2;
a[i][j] =sum ;
while(sum<=n*n){
if(i==0&&j!=N){
i = N;
j++;
sum++;
a[i][j]=sum;
}
if(sum==n*n)
break;
if(j==N&&i!=0){
j=0;
i--;
sum++;
a[i][j]=sum;
}
if(j==N&&i==0){
i++;
sum++;
a[i][j]=sum;
}
if(sum==n*n)
break;
if(i!=0&&j!=N&&a[i-1][j+1]==0){
i--;j++;sum++;
a[i][j] = sum;
}
if(sum==n*n)
break;
if(i!=0&&j<N&&a[i-1][j+1]!=0){
i++;sum++;
a[i][j] = sum;
}
if(sum==n*n)
break;
}
if(i==0&&j==0){
i=N;sum++;j++;
a[i][j] = sum;
}
}
public void paint(){
for(int k = 0;k<a.length;k++){
for(int l = 0;l<a.length;l++){
System.out.printf("%-5d",a[k][l]);
}
System.out.println();
System.out.println();
}
}
public static void main(String[] args) {
int m=0;
Scanner nuber = new Scanner(System.in);
m = nuber.nextInt();
Java_4 java = new Java_4(m);
java.jiSuan();
java.paint();
}
}