C C 練習題 順時針列印矩陣

2021-09-26 02:34:20 字數 1660 閱讀 4354

《劍指offer》面試題29:順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

<1>首先理解問題,借用圖形將問題抽象化為具體。

/*

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

*/

<2>如果把順時針列印矩陣想象成列印乙個又乙個的圈,可以利用迴圈的方法來實現。分析迴圈開始和迴圈結束的條件

每次列印乙個圈,起點位置的座標值相等,即 startx = starty。並且滿足

columns >= startx*2) && (rows >= starty*2)
<3>在具體分析實現列印乙個圈,又需要哪些步驟,要不要考慮邊界條件。其中,由於最後乙個圈的矩陣會發生退化,要確定每一步的執行條件。

ps:拿到問題,先至上向下分析問題,在從下向上解決問題。

#include "iostream"

#include "cstdlib"

using namespace std;

//問題:順時針列印矩陣

bool print_array_clockwise(int** numbers, int columns, int rows);

void print_array_circle(int** numbers, int columns, int rows, int start);

//功能:順時針方式列印陣列

//輸出:false 引數無效, true 成功

bool print_array_clockwise(int** numbers, int columns, int rows)

int start = 0; //定義起點(start, start)

//2.迴圈方式順時針列印矩陣,每次迴圈列印一圈

while ( (columns >= start*2) && (rows >= start*2) )

return true;

}//列印一圈元素,分成四個步驟。由於列印到最後乙個矩陣的時候,矩陣會退化(這時候不確定要分成幾步),所以要明確每一步的執行條件

void print_array_circle(int** numbers, int columns, int rows, int start)

} //2.從上往下列印行元素

if (start < endy) }

//3.從右向左列印列元素

if ( (start < endx) && (start < endy) ) }

//4.從下向上列印行元素

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...

順時針列印矩陣

題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...

順時針列印矩陣

from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。網上聽說聽到包括autod...