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