蛇形填数

蛇形填数

时间限制: 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();   
        }   
    }   

} 
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值