【藍橋杯】Z形列印二維陣列
阿新 • • 發佈:2020-07-22
題目描述:
示例:
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;// 為真從左到右; 1819 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 }
持續更新中……