1. 程式人生 > 實用技巧 >【演算法】斜線列印二維陣列

【演算法】斜線列印二維陣列

瑛太萊筆試

斜線列印二維陣列

  • 題目描述

    現有一個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(",");
                }
            }
        }
    }