題目:輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如,如果輸入如下矩陣:
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。列印第一圈的左上角的座標是(0,0),第二圈的左上角的座標是(1,1),······,以此類推。我們發現,左上角的座標中行標和列標總是相同的。
對於5*4的矩陣,最後一圈左上角的座標是(1,1),我們發現5>1*2且4>1*2。
對於5*5的矩陣,最後一圈左上角的座標是(2,2),我們發現5>2*2且5>2*2仍成立。
於是可以得出,讓迴圈繼續的條件是col>startcol*2並且row>startrow*2。
我們需要考慮如何列印矩陣的每一圈。將列印一圈分為四步:
從左到右列印一行。
從上到下列印一列。
從右到左列印一行。
從下到上列印一列。
最後一圈可能只有一行、一列或乙個數字。列印時每一步的前提條件。第一步總是需要的,列印一圈至少有一步。即便只有一行。需要第二步的前提條件是終止行號大於起始行號。
需要第三步的前提條件是終止行號大於起始行號且終止列號大於起始列號。(圈內至少兩行兩列)
需要第四步的前提條件是終止行號比起始行號至少大2,同時終止列號大於起始列號。(圈內至少三行兩列)
package offer;
public
class
test02,,
,};printmatrix
(num,4,
4);}
public
static
void
printmatrix
(int
numbers,
int col,
int row)
}public
static
void
printmatrixincircle
(int
numbers,
int col,
int row,
int start)
//從上到下列印一列
if(endrow>start)
}//從右到左列印一行
if(start
}//從下到上列印一列
if(start}}}
順時針列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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...