【算法】斜线打印二维数组

瑛太莱笔试

斜线打印二维数组

  • 题目描述

    现有一个m*n的数组,请按照斜对齐打印数组。例如一个a[3][4]的数组,
    1 2 3 4

    5 6 7 8

    9 10 11 12

    应按照1,2,5,3,6,9,4,7,10,8,11,12的顺序打印数组。


  • 输入描述


  • 输出描述


  • 示例


  • 代码

    import java.util.Scanner;
    
    //斜对角线打印矩阵
    public class printMatrix {
        public static void main(String[] args) {
            // 测试用例:3x4矩阵
    //        int a[][] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
            //4x4矩阵
    //        int a[][] = {{1, 2, 3, 4},
    //                    {5, 6, 7, 8},
    //                    {9, 10, 11, 12},
    //                    {13,14,15,16}};
            //3x2矩阵
    //        int a[][] = {{1, 2},
    //                    {3, 4},
    //                    {5, 6}};
    
            Scanner s = new Scanner(System.in);
            // m*n矩阵
            int m =s.nextInt();
            int n = s.nextInt();
            
            int a[][]=new int[m][n];
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    a[i][j]=s.nextInt();
                }
            }
    
            printt(m,n,a);
    
        }
    
        public static void printt(int m, int n, int[][] a) {
    
            // 副对角线及以上部分
            // 第0列到n-1列
            for (int k = 0; k < n; k++) {
                for (int i = 0, j = k; i < m && j >= 0; i++, j--) {
                    System.out.print(a[i][j]);
                    System.out.print(",");
                }
            }
    
            // 副对角线以下部分
            // 第1行到m-1行
            for (int k = 1; k < m; k++) {
                for (int i = k, j = n - 1; i < m && j >= 0; i++, j--) {
                    System.out.print(a[i][j]);
    
                    //最后一个元素后不打印逗号
                    if (!(i == m - 1 && j == n - 1))
                        System.out.print(",");
                }
            }
        }
    }
    

posted @ 2021-01-21 12:38  musecho  阅读(1165)  评论(0编辑  收藏  举报