蛇形填数
时间限制:
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 Main { public static void main(String[] args) { // 获取输入 Scanner input=new Scanner(System.in); int N=input.nextInt(); //定义四个方向,分别为 右、下、左、上 int[][] direction={{0,1},{1,0},{0,-1},{-1,0}}; //定义一个矩阵,用于存储 int[][] matrix=new int[N][N]; //x,y分别代表了矩阵中的行和列 int x=0,y=N-1; //d用于转换方向,一共四个方向, 0,1,2,3代表四个方向, 0代表向右 :x,y{0,1} 1代表向下:x,y{1,0} 2代表向左 :x,y{0,-1} 3代表向上:x,y{-1,0} int d=1; for(int i=0; i<N*N; i++) { //正常情况一直累加 matrix[x][y]=i+1; x+=direction[d][0]; y+=direction[d][1]; // x>=0 x<N y>=0 y<N 用于保证矩阵的元素必须在矩阵内 , matrix用于保证 设置过矩阵位置的元素不被覆盖掉 if(!(x>=0 && x<N && y>=0 && y<N) || matrix[x][y]!=0) { //如果以上情况不满足,证明x 和 y 的值需要撤销掉, x-=direction[d][0]; y-=direction[d][1]; ++d; //四个方向 0 1 2 3 d%=4; //重新调整后的方向 x+=direction[d][0]; y+=direction[d][1]; } } //输出矩阵的内容 for(int[] o:matrix) { for(int i:o) System.out.print(i+" "); System.out.println(); } } }