螺旋填數Java實現
阿新 • • 發佈:2018-12-23
問題描述:
螺旋填數.
讀入兩個整數m,n, 輸出一個m行n列的矩陣, 這個矩陣是1~m*n這些自然數按照右、 下、 左、 上螺旋填入的結果。
例如讀入數字4,5, 則輸出結果為:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
本文定義了四個運動狀態,過程略顯複雜,用while迴圈進行實現,程式碼如下:
package Demo; import java.util.Arrays; import java.util.Scanner; public class screwN { public static void main(String[] args) { Scanner sca1=new Scanner(System.in); System.out.println("請輸入m:"); int m=sca1.nextInt(); Scanner sca2=new Scanner(System.in); System.out.println("請輸入n:"); int n=sca2.nextInt(); int[][]scerw=new int[m][n]; //控制運動方向(4個運動狀態) int index=0; //控制行 int i=0; //控制列 int j=0; //數值 int num=1; while (zero(scerw)) { //如果index等於3後,下一個狀態應該是0 index=(index==4)?0:index; //狀態0:上(從左往右) if (index==0) { scerw[i][j]=num++; j++; if (j>=n) { j--; index++; }else { if (scerw[i][j]!=0) { index++; j--; } } } //狀態1:右(從上往下) if (index==1) { scerw[i+1][j]=num++; i++; if ((i+1)>=m) { i--; index++; }else { if (scerw[i+1][j]!=0) { index++; i--; } } } //狀態2:下(從右往左) if (index==2) { scerw[i+1][j-1]=num++; j--; if (j-1<0) { j++; index++; }else { if (scerw[i+1][j-1]!=0) { index++; j++; } } } //狀態3:左(從下往上) if (index==3) { scerw[i][j-1]=num++; i--; if (i<=0) { i++; index++; } else { if (scerw[i][j-1]!=0) { index++; i++; } } } } for (int i1 = 0; i1 < scerw.length; i1++) { for (int k = 0; k < scerw.length; k++) { System.out.print(scerw[i1][k]+"\t"); }System.out.println(" "); } } //構造一個判斷是否填滿非零的方法 public static boolean zero(int[][] ss) { for (int i = 0; i < ss.length; i++) { for (int j = 0; j < ss[0].length; j++) { if (ss[i][j]==0) { return true; } } } return false; } }
試了下結果,用的m=5,n=5:
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