順時針列印矩陣

2021-09-08 11:25:55 字數 1931 閱讀 5720

【稱號】

輸入矩陣。按照順序從外到內順時針轉動在列印出的每個數字。例如:假定輸入例如,下面的矩陣:

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

【分析】

如圖。對於矩陣有下面幾種情況,順時針列印矩陣,意味著。從左至右(紅色),從右上到右下(藍色),從右至左(黃色),從左下至左上(綠色)。

對於多維矩陣,內圈一樣的列印順序,如情況1所看到的。可是注意情況2。3。4皆為特殊矩陣,列印步驟和情況1略有不同。情況1列印能夠遞迴一圈圈從外到內列印,分為4步,觀察每一圈的起始位置都在對角線上,即(start,start)。那麼何時才幹知道無法再遞迴列印了呢。觀察4*4矩陣,最後一圈起始位置(1,1),4>1的2倍。5*5矩陣,最後一圈起始位置(2,2),5>2的2倍。所以能夠得到,當矩陣維數大於起始位置的兩倍時,是存在一圈的,否則,已經列印全然了。

列印一圈的詳細步驟:

1. 從起始位置開始,從左至右依次列印本行,至本行結束(無條件執行)。

2. 從下一行開始,從上到下依次列印本列。至本列結束,可是有前提,考慮到特殊情況2,沒有列,僅僅有一行,所以無需第二步。由此,在這一步須要提前推斷是否有必要繼續,非要執行這一步矩陣就至少要有兩行,所以利用終止行號是否大於起始行號來推斷;

3. 矩陣至少是兩行兩列時才須要第三步,第三步從右至左順序列印,不僅須要終止行號大於起始行號,並且還要終止列號大於起始列號(第2步執行了,才考慮第三步,所以這個是必要條件);

4. 矩陣至少三行兩列,才須要執行第四步,要保證終止行號至少要比起始行號大2,同一時候終止列號大於起始列號(第3步執行了。第4步才考慮)。

【測試**】

//順序列印矩陣

#include

void printnumber(int number)

void printmatrixincircle(int **numbers, int rows, int columns, int start)

//第二步:從右上到右下

if(start < end_bottom)

}//第三步:從右到左

if(start < end_right && start < end_bottom)

}//第四步:從左下到左上

if(start < (end_bottom-1) && start < end_right)

}}//輸入二維矩陣,行和列。遞迴列印每一圈

void printmatrixclockwisely(int **numbers, int rows, int columns)

}void printmatrix(int **numbers, int rows, int columns)

}//測試**

void test(int rows, int columns)

printf("test(%d,%d):\n",rows,columns);

printmatrix(numbers, rows, columns);

printf("\n順時針列印:\n");

printmatrixclockwisely(numbers, rows, columns);

printf("\n***********************************************\n");

}void main()

【輸出】

這裡要注意**中怎樣利用二維陣列操作二維指標的過程。

順時針列印矩陣

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