【java】蛇形填數 螺旋填數
阿新 • • 發佈:2019-02-16
蛇形填數
在n*n的方陣裡填成蛇形,例如:
1 2 3 4 516 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
原理:建立一個二維陣列,將陣列清零,用a[i][j]==0判斷該位置是否已填數,用x,y記錄下一個數的座標,t記錄填入的數字。
樣例輸入:
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
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int n=scanner.nextInt(); int[][] a=new int[n][n]; for(int[] temp:a){ Arrays.fill(temp, 0); } int t=1,x=0,y=0; a[0][0]=t; while(t<n*n){ while(y+1<n&&(a[x][y+1]==0)) a[x][++y]=++t; while(x+1<n&&(a[x+1][y]==0)) a[++x][y]=++t; while(y-1>=0&&(a[x][y-1]==0)) a[x][--y]=++t; while(x-1>=0&&(a[x-1][y]==0)) a[--x][y]=++t; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } scanner.close(); } }
如果蛇形填數要求的形狀是:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
只需對以上程式碼稍作修改即可,原理相同。
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int n=scanner.nextInt(); int[][] a=new int[n][n]; for(int[] temp:a){ Arrays.fill(temp, 0); } int t=1,x=0,y=n-1; a[0][n-1]=t; while(t<n*n){ while(x+1<n&&(a[x+1][y]==0)) a[++x][y]=++t; while(y-1>=0&&(a[x][y-1]==0)) a[x][--y]=++t; while(x-1>=0&&(a[x-1][y]==0)) a[--x][y]=++t; while(y+1<n&&(a[x][y+1]==0)) a[x][++y]=++t; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } scanner.close(); } }
螺旋填數
在n*n的方陣裡螺旋填數,例如:
13 12 11 10 25
14 3 2 9 24
15 4 1 8 23
16 5 6 7 22
17 18 19 20 21
原理仍與蛇形填數一樣,只不過t從大到小填而已。
樣例輸入:
6
樣例輸出:
21 20 19 18 17 36
22 7 6 5 16 35
23 8 1 4 15 34
24 9 2 3 14 33
25 10 11 12 13 32
26 27 28 29 30 31
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int n=scanner.nextInt(); int[][] a=new int[n][n]; for(int[] temp:a){ Arrays.fill(temp, 0); } int t=n*n,x=0,y=n-1; a[0][n-1]=t; while(t>1){ while(x+1<n&&(a[x+1][y]==0)) a[++x][y]=--t; while(y-1>=0&&(a[x][y-1]==0)) a[x][--y]=--t; while(x-1>=0&&(a[x-1][y]==0)) a[--x][y]=--t; while(y+1<n&&(a[x][y+1]==0)) a[x][++y]=--t; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } scanner.close(); } }