很早就看到這道題了,但是我是乙個患有拖延癌的人。有個朋友經常開玩笑,總有一天你會錯過你的婚禮。
今天上午去自習室認真思考了乙個小時,認真把邏輯理順了。在草稿紙上把基本**寫了一道,回來驗證成功了,開心。
首先,列印矩陣,分圈數列印,判斷需要列印幾圈。
由於矩陣的對稱性,矩陣是用乙個二維陣列儲存的。所以矩陣的維數除以2,就是需要列印的圈數。
下圖是6*6矩陣,所以需要列印3圈。
然後每圈列印的方式都是一樣的。
如上圖所示這是乙個6*6的矩陣。
每圈分成4部分輸出,總共分成三圈。
(圖中只標明的臨界點為第一圈臨界點的位置。)
第一部分輸出,每圈從最左邊上面那個點開始一直列印到每圈最上面最右邊的前乙個點結束,作為最上面一行。
特點:每圈這一部分行的值不變,列的值在增加,換算成二維陣列的就是下標第乙個引數不變第二個引數增加。
第一圈從a[0][0]到a[0][4]結束;
第二圈從a[1][1]到a[1][3]結束;
第三圈從a[2][2]到a[2][2]結束(只有乙個點為了比較所以寫出來)。
列印完n圈row行column列,在列印n+1圈的時候就要把起始點的row和column都+1,所以在列印完第n圈後把row和column都加1.
從開始點開始列印,執行column++操作,結束點的 column都是number-port-2(number表示維度,port表示已經列印了的圈數).
第二部分輸出,每圈從最右邊上面那個點開始一直列印到每圈最下面最左邊的後一行點結束,作為最下面一行。
特點:每圈每一部分列的值不變,行的值在增加,換算成二維陣列的就是下標第乙個引數不變第二個引數增加。
第一圈從a[0][5]到a[4][5]結束;
第二圈從a[1][4]到a[3][4]結束;
第三圈從a[2][3]到a[2][3]結束(只有乙個點為了比較所以寫出來)。
由於開始點是第一部分結束點的下乙個點,所以開始點(就是當時的a[row][column],因為第一部分每次都執行了column++的)開始列印,
執行row++操作,結束點的row都是number-port-2(number表示維度,port表示已經列印了的圈數).
第三部分輸出,每圈從最右邊下面那個點開始一直列印到每圈最下面最左邊的前乙個點結束,作為最下面一行。
特點:每圈這一部分行的值不變,列的值在減小,換算成二維陣列的就是下標第乙個引數不變第二個引數減小。
第一圈從a[5][5]到a[5][1]結束;
第二圈從a[4][4]到a[4][2]結束;
第三圈從a[3][3]到a[3][3]結束(只有乙個點為了比較所以寫出來)。
由於開始點是第二部分結束點的下一行的點,所以開始點(就是當時的a[row][column],因為第二部分每次都執行了row++的)開始列印,
執行column--操作,結束點的column都是port+1(port表示已經列印了的圈數).
第四部分輸出,每圈從最左邊下面那個點開始一直列印到每圈最上面最左邊的下一行點結束,作為最下面一行。
特點:每圈這一部分列的值不變,行的值在減小,換算成二維陣列的就是下標第二個引數不變第乙個引數減小。
第一圈從a[5][0]到a[1][0]結束;
第二圈從a[4][1]到a[2][1]結束;
第三圈從a[3][2]到a[3][2]結束(只有乙個點為了比較所以寫出來)。
由於開始點是第而部分結束點的前一列的點,所以開始點(就是當時的a[row][column],因為第二部分每次都執行了column--的)開始列印,
執行row--操作,結束點的row都是port+1(port表示已經列印了的圈數).
最後,判斷矩陣是奇偶矩陣,存在中間數需要列印。
由於圈數是以number/2作為判斷標準,所以當奇數是就忽略了中心點數,判斷是奇數後需要單獨列印出來。
#include using namespace std;
void print(int **array, int number)
}print(p,number);
system("pause");
return 0;
}
小記:此**輸入的矩陣為row和column一樣的矩陣,row和column不一樣的改一下即可。
矩陣為空沒判斷,需要的請自己新增。
本來寫完覺得自己的方法太笨,時間複雜度太高,看了哈《劍指offer>>沒想到差不多的,好開心。
終於寫完了,超級累,洗洗睡了,**白敷了,哈哈哈。
順時針列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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...