順時針列印矩陣

2021-09-23 18:48:14 字數 1472 閱讀 1065

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

例如,輸入如下矩陣:

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。

分析:把矩陣看成若干個圈。利用迴圈一次列印乙個圈。假如矩陣有row行,col列,選取左上角座標為(start,start)的點開始列印,對於乙個5*5的矩陣,最後一圈座標為(2,2),對於6*6的矩陣,最後一圈座標也是(2,2)。因此,由規律可知,迴圈繼續的條件是:col>start*2並且row>start*2。

列印一圈:分為四步。不過要考慮最後一行有可能退化成一行,一列,或者乙個數字。這樣就不是每一圈都能走完四步,因此需要進行判斷。 

從左到右列印一行

從上到下列印一行:(前提條件)endy > start 終止行號大於起始行號

從右到左列印一行:(前提條件)endx > start && endy > start  終止行號大於起始行號並且終止列號大於起始列號

從下到上列印一行:(前提條件) endx + 2> endy && endy > start  終止行號比起始行號大2並且終止列號大於起始列號

//從上到下

if (endy > start)

} //從右到左

if (endx > start && endy > start)

} //從下到上

if ((endx + 2) > endy && endy > start)

} return;

}void print(int(*a)[col], int row, int col)

while (start * 2 < row && start * 2 < col)

return;

}int main()

; show(a, row, col);

print(a, row, col);

printf("\n");

system("pause");

return 0;

}

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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...