劍指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...