顺时针输入数组

如题:定义N*M的数组,按照顺时针将0~n*m-1输入到数组中。下面是我用Java写的实现:

思路:我使用二维数组做的,按照顺时针复制顺序,可以发现赋值分为四种方式(右,下,左,上),所以我建立了四个方法,

以向右函数为起始点,然后内部调用向下函数,依次内调,形成右->下->左->上->右的循环,利用数组初始化后的值是0作为结束的标志。

 

public class Test7 {
    static int flag = 0;
    static int n = 0;
    static int m = 0;
    public static void main(String args[])
    {
        int k = 6;        //我直接手动赋值了。
        int b = 6;
        int[][] a = new int[k][b];
        n = k;
        m = b;
        right(a,0,0);  //赋值开始
        fun(a,k,b);
    }
    
    
    
    public static void fun(int[][] a,int n,int m) //打印结果
    {
        for(int i = 0;i<n;i++)
        {
            for(int j = 0;j<m; j++)
            {
                System.out.print("   "+a[i][j]);
            }
            System.out.println();
        }
    }
    
    public static void right(int[][] a,int x, int y)
    {
        if(x!=0&&y!=0&&a[x][y] != 0)
        {
            return;
        }
        else 
        {
            for(int i = 0;i<m;i++)
                a[x][y++] = flag++;
            m -= 1;
            down(a,x+1,y-1);
        }
        
            
    }
    
    public static void down(int[][] a,int x, int y)
    {
        if(a[x][y]!=0) return;
        else
        {
            n -=1;
            for(int i = 0;i<n;i++)
                a[x++][y] = flag++;
            left(a,x-1,y-1);
        }
    }
    public static void left(int[][] a,int x, int y)
    {
        if(a[x][y]!=0) return;
        else
        {
            for(int i = 0;i<m;i++)
                a[x][y--] = flag++;
            m -=1;
            up(a,x-1,y+1);
        }
    }
    public static void up(int[][] a,int x, int y)
    {
        if(a[x][y]!=0) return;
        else
        {
            n -=1;
            for(int i = 0;i<n;i++)
                a[x--][y] = flag++;
            right(a,x+1,y+1);
        }
    }
}

 

 输出结果:

   0     1     2     3    4     5
   19   20   21   22   23   6
   18   31   32   33   24   7
   17   30   35   34   25   8
   16   29   28   27   26   9
   15   14   13   12   11   10
 
第一次发博客,不喜勿喷。欢迎来指点~谢谢
posted @ 2013-10-18 11:18  Liverfly  阅读(452)  评论(0编辑  收藏  举报