南陽OJ題目33---蛇形填數
阿新 • • 發佈:2019-01-28
蛇形填數
時間限制:3000 ms | 記憶體限制:65535 KB難度:3- 描述
- 在n*n方陳裡填入1,2,...,n*n,要求填成蛇形。例如n=4時方陳為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
- 輸入
- 直接輸入方陳的維數,即n的值。(n<=100)
- 輸出
- 輸出結果是蛇形方陳。
- 樣例輸入
3
- 樣例輸出
7 8 1 6 9 2 5 4 3
程式碼
import java.util.Scanner; public class Test33 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] a=new int[100][100]; int i,j,k=1; for (i=0;i<n/2;i++) { for (j=i;j<=n-2-i;j++) a[j][n-i-1]=k++; for (j=n-1-i;j>=i+1;j--) a[n-1-i][j]=k++; for (j=n-i-1;j>=i+1;j--) a[j][i]=k++; for (j=i;j<=n-2-i;j++) a[i][j]=k++; } if (n%2==1) { i=n/2; a[i][i]=n*n; } for (i=0;i<n;i++) { for (j=0;j<n;j++) System.out.print(a[i][j]+" "); System.out.print("\n"); } sc.close(); } }
另一種解法
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int sum = 0; int x,y; int[][] a = new int[N][N]; sum = a[x=0][y=N-1] = 1; while (sum < N*N) { while(x+1<N && a[x+1][y]==0) a[++x][y] = ++sum; while(y-1>=0 && a[x][y-1]==0) a[x][--y] = ++sum; while(x-1>=0 && a[x-1][y]==0) a[--x][y] = ++sum; while(y+1<N && a[x][y+1]==0) a[x][++y] = ++sum; } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) System.out.print(a[i][j]+" "); System.out.print("\n"); } } }