n=3 n=4
1 2 3 1 2 3 4
8 9 4 12 13 14 5
7 6 5 11 16 15 6
10 9 8 7
可以看出当n是偶数的时候总共是k=n/2圈,当n是基数的时候总共是k=n/2圈+中间的一个原素A[n/2,n/2]
public void printJZ(int n){ int [][]A=new int[n][n]; int t=1;//初始值 int i,j; for(int k=0;k<n/2;k++){//k代表第几圈 for(i=k,j=k;j<n-k-1;j++){//第一条边 j的变化就是从k->n-1-k A[i][j]=t++; } for(i=k,j=n-k-1;i<n-k-1;i++){//第二条边i的变化就是从k->n-1-k A[i][j]=t++; } for(i=n-k-1,j=n-k-1;j>k;j--){//第三条边跟第一条边反过来从j从n-1-k->k A[i][j]=t++; } for(i=n-k-1,j=k;i>k;i--){//第四条边跟第二条边反过来从i从n-1-k->k A[i][j]=t++; } } if(n%2==1){ A[n/2][n/2]=t; } for(i=0;i<n;i++){ for (j=0;j<n;j++) { System.out.print(A[i][j]+" "); } System.out.println(); } }