蛇形填数

2014-11-24 10:46:19 · 作者: · 浏览: 0

蛇形填数
时间限制: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

算法:
[java]


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 {
//正常情况一直累加
matrix[x][y]=i+1;
x+=direction[d][0];
y+=direction[d][1];
// x>=0 x=0 y if(!(x>=0 && x=0 && y {
//如果以上情况不满足,证明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();
}
}

}


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 {
//正常情况一直累加
matrix[x][y]=i+1;
x+=direction[d][0];
y+=direction[d][1];
// x>=0 x=0 y if(!(x>=0 && x=0 && y {
//如果以上情况不满足,证明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();
}
}

}