[Problem] 蛇行矩阵

/*
 * Problem
 *蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 
 *Input
 *本题有多组数据,每组数据由一个正整数N组成。(N不大于100) 
 *Output
 *对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。 
 *矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。 
 *Sample Input
 *5
 *Sample Output
 *1 3 6 10 15   
 *2 5 9 14  
 *4 8 13
 *7 12
 *11
*/
public class SnakeMatrix {

    private int n = 0;
    
    private int snakeMatrix[][] = new int[n][n];
    
    /*
     * 构造函数,用于初始化要打印的N行,以及根据N值初始化蛇形数组。
     */
    public SnakeMatrix(int n)
    {
        this.n = n;
        this.snakeMatrix = new int[this.n][this.n];
        this.iniSnakeMatrix();
    }
    
    /*
     * 按照规律初始化蛇形数组
     */
    private int[][] iniSnakeMatrix()
    {
        for(int i = 0; i < this.n; i++)
        {
            for(int j = 0; j < this.n - i; j++)
            {
                if ( i == 0)
                {
                    snakeMatrix[i][j] = ((j + 1) * (j + 2))/2;//第一行的规律是(n+1)*(n+2)/2
                }
                else
                {
                    snakeMatrix[i][j] = snakeMatrix[i - 1][j+1] - 1;//后面的行中数字等于上一行左移1位后再减1
                }
            }
        }
        
        return snakeMatrix;
    }
    
    /*
     * 打印输出蛇形数组,各数字使用空格分离,并且每行的行尾没有多余的空格
     */
    public void printSnakeMatrix()
    {
        String tmp = null;
        for (int i = 0; i < snakeMatrix.length; i++)
        {
            for (int j = 0; j < snakeMatrix[i].length; j++)
            {
                tmp = ((j != snakeMatrix.length -i -1) ? " " : "");//行中加空格,行尾不要多余的空格
                if (snakeMatrix[i][j] != 0)//去掉数组中的0,即清零
                {
                    System.out.print(snakeMatrix[i][j] + tmp);
                }
            }
            System.out.print("\n");//打完一行后,输出换行符
        }
        
        return;
    }
    
    /*
     * 返回蛇形数组
     */
    public int[][] getSnakeMatrix()
    {
        return this.snakeMatrix;
    }
}

你可能感兴趣的:(java,编程小题目,蛇形矩阵)