題目:給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。
例如:給定矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
輸出應該為:
分析:這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種邊界條件的判定,題目不難,但是給人的感覺——很煩!我分享一下,我做這道題的思路。
迴圈條件怎麼判定?乙個矩陣,給定起點(startx,starty)和終點(endx,endy)(即位於對角線上的兩個點)就可以列印一周,然後向裡進一周(即++startx,++starty,--endx,--endy)即可,如果起始點座標《終止點座標(即startx給定起點和終點,列印一周的結束條件是什麼?我畫了三種情況的矩陣4×4矩陣,3×5矩陣,5×3矩陣(所有矩陣無非就這三種型別,正方形的,偏「胖」的,偏「瘦」的),很快發現,只有三種情況:一直迴圈到結束,只剩下一行,只剩下一列。所以我們的函式首先判定:只有一行?列印該行;只有一列,列印該列。都不是,列印四條邊上的數字。
好了到這裡為止:我們可以寫出完整的**了,如下:
1 #include2 #include執行結果如下:3using
namespace std;45
void printmatrixcircle(int **num,int sx,int sy,int ex,int ey);67
//給定矩陣,給定行列,由外向內順時針列印數字
8void printmatrixclockwisely(int **matrix,int rows,int columns)
9 33 }
3435
//對於給定矩陣,給定對角線上兩點,列印這一周的元素
36void printmatrixcircle(int **num,int sx,int sy,int ex,int ey)
37 45
46return;
47 }
48//
只有一列的情況,直接列印,返回。
49if(sy == ey)
50
55return;
56 }
5758
//一般的情況列印四行
59for(int p = sy;p < ey;++p)
60
6364
for(int q = sx;q < ex;++q)
65
6869
for(int m = ey;m > sy;--m)
70
7374
for(int n = ex;n > sx;--n)
75
7879 }
8081
int main()
82 ;
85int **point = point1;
86int cnt=1;
8788
//初始化
89for(int i = 0;i < 6;i++)
90
96 }
9798 cout<
the original matrix is:
"<99
for(i = 0;i < 6;i++)
100
105 cout<106 }
107108 cout<
the clockwisely output of the matrix is:
"<109
110 printmatrixclockwisely(point,6,6);
111 cout<112
113return
0;114 }
這是正方形矩陣,我也測試了偏」胖「型矩陣和偏」瘦型矩陣「,要測試的話,大家需要對main函式的矩陣和指標做適當修改;
我的測試用例和測試結果如下:
偏」胖「型矩陣測試:
偏」瘦「型矩陣測試:
何海濤部落格:
注:1)本部落格所有的**環境編譯均為win7+vc6。所有**均經過博主上機除錯。
2)博主
python27
順時針列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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看著就煩,就是...
順時針列印矩陣
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...
順時針列印矩陣
來自 38 順時針列印矩陣 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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。分析 包...