旋轉列印矩陣 旋轉儲存矩陣 之字形列印矩陣

2021-07-08 14:41:04 字數 2764 閱讀 2520

題目:輸入乙個矩陣,按照從外向裡以順時針順序依次列印出每乙個數字。例如:如果輸入如下矩陣:

1      2    3     4

5      6    7     8

9    10  11  12

13  14  15  16

有三問:

1)如何實現轉圈列印矩陣? 

2)如何實現順時針旋轉矩陣?

3)如何實現「之」字形列印矩陣?

題外話:

由於要列印輸出矩陣,從題目可以看出,數字位數有變化,所以統一按最大位數輸出,便於對齊。

使用位於標頭檔案中的格式化函式 std::setw(int n); 來固定每次輸出的位數

1)先來實現轉圈列印矩陣。我們以順時針來轉圈

從整體上來把握。先定義乙個列印一圈的函式,根據圈的左上角座標和右下角座標來確定圈的大小。

void printonecircle(int(*matrix)[4], int lefttopx, int lefttopy, int rightbottomx, int rightbottomy)

//當子矩陣只有一列時

else if(lefttopy == rightbottomy)

else

while(curx != rightbottomx)

while(cury != lefttopy)

while(curx != lefttopx)

}}

之後,定義順時針列印函式。

void clockwiseprint(int(*matrix)[4], int height, int width)

測試函式及 輸出結果如下所示:

2)接下來,我們來實現 順時針旋轉矩陣。旋轉後,矩陣中的內容發生變化。

採用的方法和第1)問的解法相似。先對一圈進行旋轉,之後,縮小一圈,繼續對內圈進行旋轉。直至最後。

void clockwiserotatematrix(int (*matrix)[4], int lefttopx, int lefttopy, int rightbottomx, int rightbottomy)

}

之後,從外圈向內圈 依次呼叫上面的這個函式。

void rotatematrix(int (*matrix)[4], int height, int width)

下面是測試函式及結果

3)實現「之」字形列印矩陣

該問題的解決方案和上面依然很類似。

上面是先列印指定的一圈,該問題要先列印指定的一條斜線。

由於之字形列印是上下來回交替著列印,所以要定義乙個bool變數來指示列印的方向。

void zigzagprintline(int (*matrix)[4], int leftx, int lefty, int rightx, int righty, bool isfrombottom)

之後,依次呼叫該斜線函式

void zigzagprintmatrix(int (*matrix)[4], int height, int width)

if(++righty > endy)

isfrombottom = !isfrombottom;}}

下面是測試函式及列印結果

「之」字形列印矩陣

package class 03 之 字形列印矩陣 題目 給定乙個矩陣matrix,按照 之 字形的方式列印這個矩陣,例如 1 2 3 4 5 6 7 8 9 10 11 12 之 字形列印的 結果為 1,2,5,9,6,3,4,7,10,11,8,12 要求 額外空間複雜度為o 1 public ...

「之」字形列印矩陣

題目 給定乙個矩陣matrix,按照 之 字形的方式列印這個矩陣,例如 1 2 3 4 5 6 7 8 9 10 11 12 之 字形列印的結果為 1,2,5,9,6,3,4,7,10,11,8,12 解題思路 採用兩個函式,乙個用於遍歷斜行,得到斜行左下角座標和右上角座標,另乙個函式用於列印兩個座...

「之」字形列印矩陣

題目 給定乙個矩陣matrix,按照 之 字形的方式列印這 個矩陣,例如 1 2 3 4 5 6 7 8 9 10 11 12 之 字形列印的結果為 1,2,5,9,6,3,4,7,10,11,8,12 要求 額外空間複雜度為o 1 思路 同樣是通過兩點來確定範圍,每次列印的斜線實際上是兩個點所在直...