蛇形填数

来源:互联网 时间:1970-01-01

蛇形填数

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

         

 


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(); 
         } 
     } 

}
       

 


相关阅读:
Top