描述:
在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 Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][n]; for(int i=0;i<n;i++){ for(int z=0;z<n;z++){ arr[i][z] = 0; } } int number = 1; Direction d = Direction.down; int x=0; int y=n-1; while(number < n*n){ if(d == Direction.down){ if(x == n-1 || arr[x+1][y] != 0){ d = Direction.left; }else{ arr[x][y]= number; number ++ ; x++; } } if(d == Direction.left){ if(y==0 || arr[x][y-1] != 0){ d = Direction.up; }else{ arr[x][y]= number; number ++ ; y--; } } if(d == Direction.up){ if(x == 0 || arr[x-1][y] != 0){ d = Direction.right; }else{ arr[x][y]= number; number ++ ; x--; } } if(d == Direction.right){ if(y == n-1 || arr[x][y+1] !=0){ d = Direction.down; }else{ arr[x][y]= number; number ++ ; y++; } } } for(int i=0;i<n;i++){ for(int z=0;z<n;z++){ if(arr[i][z] == 0){ arr[i][z] = n*n; } System.out.print(arr[i][z]+" "); } System.out.println(); } } } enum Direction{ down,left,up,right }
只要存数字时按照方向来就存就行了,如果到边界或者下一个有数字了就让他转向存.这里有个问题,如果把最后一个数字也在循环里面放进去的话 就进入无限循环了..不知道怎么跳出,干脆就在输出的时候把这个数字替换掉了...
时间: 2024-10-28 18:36:51