【算法】斜线打印二维数组
瑛太莱笔试
斜线打印二维数组
-
题目描述
现有一个m*n的数组,请按照斜对齐打印数组。例如一个
a[3][4]
的数组,
1 2 3 45 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(","); } } } }