蛇形填数
时间限制: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 sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] a = new int[n][n]; //定义一个n*n列的数组
int x,y,tot=0;
tot = a[x=0][y=n-1]=1; //设置第n-1列的数为1
while(tot<n*n){ //把所有格子初始化为0
while(x+1<n && a[x+1][y]==0) a[++x][y]=++tot; //第一步方向向下x+1,x+1<n判断是否越界,用&&短路运算符,先判断是否越界再移动
while(y-1>=0 && a[x][y-1]==0) a[x][--y]=++tot; //第二步方向向左y-1,每一步移动tot数量加一
while(x-1>=0 && a[x-1][y]==0) a[--x][y]=++tot; //第三步方向向上x-1
while(y+1<n && a[x][y+1]==0) a[x][++y]=++tot; //第四步方向向右y+1,之后依次循环,指导tot>n*n
}
for(x=0;x<n;x++){
for(y=0;y<n;y++){
System.out.print(a[x][y]+" ");
}
System.out.print("\n");
}
}
}