1199: 蛇形矩阵
时间限制: 1 Sec 内存限制: 128 MB
提交: 105 解决: 39
题目描述
在一个N*N的方阵中,填入1,2,……N 共N个数,并要求构成如下的格式:N<=10,
例:
N=4
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
多组数据,每行读入一个N.
输出
对应输出N*N的蛇形矩阵,每个数字占3格子,
每个蛇形矩阵之间用空行分割.
每个测试案例之间有一个空行
样例输入
3
4
样例输出
7 8 1
6 9 2
5 4 3
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
int a = in.nextInt();
int A[][] = new int[a][a];
int x = 0,y=a-1;
A[x][y]=1;
for(int i=2;i<=a*a;i++) {
if(x+1<a&&A[x+1][y]==0) {//如果下方还有位置且元素为0
x++;
}else if(y-1>=0&&A[x][y-1]==0) {//如果左方还有位置且元素为0
y--;
}else if(x-1>=0&&A[x-1][y]==0) {//如果上方方还有位置且元素为0
x--;
}else {
while(y+1<a&&A[x][y+1]==0){//这个一定要把右方填完,不然就会出现只填了一个数就开始往下方填数
y++;
A[x][y] = i;
i++;
}
i--;//上方循环多加了一次要减回去
continue;//跳过本次循环使其回到第一步往下填充
}
A[x][y] = i;
}
for(int j=0;j<a;j++) {
for(int k =0;k<a;k++) {
System.out.printf("%3d",A[j][k]);
}
System.out.println();
}
System.out.println();
}
in.close();
}
}
又是水题的一天。。。。。。
递归不会用,就直接暴力探索赋值了