解題 從外到內順時針列印給定矩陣(C 實現)

2021-08-21 13:41:55 字數 1474 閱讀 2268

輸入乙個矩陣,按照從外到內以順時針依次列印每乙個數字。例如輸入如下矩陣:

1 2 3 4 5

6 7 8 9 10

1 2 3 4 5

6 7 8 9 10

則依次列印:1、2、3、4、5、10、5、10、9、8、7、6、1、6、7、8、9、4、3、2

演算法描述

利用迴圈實現,每次迴圈列印矩陣中的乙個圈,迴圈的條件為:columns>startx*2 && rows>starty*2,這個條件畫圖分析可以很容易的得到。列印一圈可以分四步走:從左至右、從上至下、從右至左、從下至上。每一步根據起始座標和終止座標利用迴圈即可列印出一行或者一列。這裡需要考慮的邊界條件是,最後一圈可能發生退化(畫圖可以很自然地得到):

有了這幾個前提,考慮每一圈的列印:

**演算法實現及測試**:

#include #include using namespace std;

//列印乙個數字

void printnumber(int number)

//按圈列印

void printmatrixincircle(int

**matrix, int columns, int rows, int start)

//step2:從上到下

if (startfor (int i = start + 1; i <= endy; i++)

}//step3:從右到左

if (startfor (int i = endx - 1; i >= start; i--)

}//step4:從下到上

if (start1)

}}//順時針列印迴圈函式

void printmatrixclockwisely(int

**matrix, int columns, int rows)

int start = 0;

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

}//測試主函式

int main()

for (int i = 0; i < 4; i++)

}//列印原始矩陣

for (int i = 0; i < 4; i++)

}cout << endl << endl;

//順時針列印

printmatrixclockwisely(matrix, 5, 4);

//釋放記憶體

for (int i = 0; i < 4; i++)

delete matrix;

return

0;}

測試結果

其他測試用例

陣列有多行多列,陣列僅一行,陣列僅一列,陣列僅一行一列。

順時針從外到內列印數字矩陣

列印數字矩陣到標準輸出。按順時針方向,從外到內列印矩陣。起點是矩陣的左上角。class matrix def initialize width n 0 width width 矩陣的寬度 建立二維陣列 square array.new width do array.new width,0 enden...

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...