從鍵盤輸入一個整數(1~20)
則以該數字爲矩陣的大小,把1,2,3…n*n 的數字按照順時針螺旋的形式填入其中。例如:
輸入數字2,則程序輸出:
1 2
4 3
輸入數字3,則程序輸出:
1 2 3
8 9 4
7 6 5
輸入數字4, 則程序輸出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
分析:通過輸出結果,如果將數據存在一個二維數組中,可以看出這樣一種規律,數字的填充順序爲:
1.行座標不變列座標遞增,當列座標超出最大範圍或者要填充的位置已經被填充過,則跳轉到步驟2,
2.行座標遞增列座標不變,當行座標超過最大範圍或者要填充的位置已經被填充過,則跳轉到步驟3
3.行座標不變列座標遞減,當列座標小於最小範圍或者要填充的位置已經被填充過,則跳轉到步驟4
4.行座標遞減列座標不變,當行座標小於最小範圍或者要填充的位置已經被填充過,則跳轉到步驟1
只要循環執行以上四個步驟,每執行一個步驟則填充一個數據,直到全部數據填充完則結束
對應java代碼如下:
public class FillNumber
{
public static void main(String[] args)
{
int n=5;//測試數據
int[][] numberMatrix=getNumberMatrix(n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.printf("%-4d",numberMatrix[i][j]);
}
System.out.println();
}
}
public static int[][] getNumberMatrix(int n){
int[][] result=new int[n][n];
int number=1; //填充二維數組的數字
int i=0; //行下標
int j=0; //列下標
//代表如何填充數字,1表示從左到右填充,2表示從上到下填充,3表示從右到左填充,4表示下到上填充
char type=1;
while(number<=n*n){
result[i][j]=number;
if(type==1){
j++;
if(j==n||result[i][j]!=0){
type=2;
i++;
j--;
}
}else if(type==2){
i++;
if(i==n||result[i][j]!=0){
type=3;
j--;
i--;
}
}else if(type==3){
j--;
if(j==-1||result[i][j]!=0){
type=4;
j++;
i--;
}
}else{
i--;
if(i==0||result[i][j]!=0){
type=1;
i++;
j++;
}
}
number++;
}
return result;
}
}
輸出結果:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9