1. 程式人生 > 實用技巧 >【藍橋杯】Z形列印二維陣列

【藍橋杯】Z形列印二維陣列

題目描述:

示例:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

輸出:

1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16

分析:

看作是在走斜線,從做向右走(上坡)和從右向左走(下坡)。

邊界處理:

如果是從左向右走l2r=true,走上坡,先列印該位置的元素,在判斷下一步怎末走:

  1.該位置r(row)=0,且c(col)沒有到達邊界,只能向右走(比如說:1->2);

  2.該位置c到達邊界,且r沒有到達邊界,只能向下走(比如說:8->12);

  3.其餘情況都是順暢的向右上↗走,r--;c++;

否則,l2r=false,走下坡,先列印該位置元素,在判斷下一步怎末走:

  1.該位置c=0,且r沒有到達邊界,只能向下走(比如說:5->9);

  2.該位置r到邊界,只能向右走(比如說:10->11);

  3.其餘情況順暢的想左下↙走,c--;r++;

程式碼如下:

 1 public class case3 {
 2 
 3     public static void main(String[] args) {
 4 
 5         int arr[][] = { 
 6                 { 1, 2, 3, 4 }, 
 7                 { 5, 6, 7, 8 }, 
8 { 9, 10, 11, 12 }, 9 { 13, 14, 15, 16 } 10 }; 11 printZ(arr); 12 13 } 14 static void printZ(int[][] matrix) { 15 int r = 0, m = matrix.length; 16 int c = 0, n = matrix[0].length; 17 boolean l2r = true;// 為真從左到右; 18
19 while (r < m && c < n) { 20 if (l2r) {// 從左向右 21 System.out.print(matrix[r][c] + " "); 22 if (r == 0 && c < n - 1) {// 只能向右走; 23 l2r = !l2r; 24 c++; 25 continue; 26 } else if (c == n - 1 && r > 0) {// 只能向下走; 27 l2r = !l2r; 28 r++; 29 continue; 30 } else { 31 r--; 32 c++; 33 } 34 35 } else {// 從右向左走 36 System.out.print(matrix[r][c] + " "); 37 if (c == 0 && r < m - 1) {// 只能向下走; 38 l2r = !l2r; 39 r++; 40 continue; 41 } else if (r == m - 1) {// && c < n - 1 42 l2r = !l2r; 43 c++; 44 continue; 45 } else { 46 c--; 47 r++; 48 } 49 } 50 51 } 52 53 } 54 }

持續更新中……