實驗室師兄找工作時在有道遇到的一道筆試題:列印雙螺旋矩陣。
雙螺旋矩陣的定義如下,矩陣的最中心是1,往上是2,右拐3,向下4,然後依次5、6,7...構成一條順序增大的螺旋線,此外,如果從中心往下走的話,也是一條對稱的螺旋線。題目是給定乙個矩陣維度n,將其列印出來,示例如下。要求在紙上把**寫完整,時間半小時左右。
25 14 15 16 17 18 19
24 13 6 7 8 9 20
23 12 5 2 3 10 21
22 11 4 1 4 11 22
21 10 3 2 5 12 23
20 9 8 7 6 13 24
19 18 17 16 15 14 25
看上去似乎挺簡單,但是做的時候還是遇到了一些麻煩,最後參考師兄的思路,我給出了下面的實現。基本思路是,先列印中心,然後一圈一圈地將外圍矩陣列印出來。列印每圈的時候,先分別計算出左上角和右下角的座標(pos)和值,然後沿著螺旋線的方向,從左上角出發列印這一圈矩陣的上邊和右邊;從右下角出發列印下邊和左邊。**如下,能夠正確執行,歡迎提出意見。
#include
#include
#include
typedef
struct
position;
void
print_screws_matrix(
intsize )
/* calculate right and left sides of screw */
for( i = 0; i < 2*screwnum; ++i )
}/* print matrix */
for( i = 0; i < size; ++i )
for( i = 0; i < size; ++i )
free( matrix[i] );
free( matrix );
}int
main()
參考:
輸出螺旋矩陣
螺旋矩陣 是指乙個呈螺旋狀的矩陣,它的數字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此迴圈。如圖1 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 輸出螺旋矩陣 author zhanliqing ...
輸出螺旋矩陣
關於螺旋矩陣的說法不一,這裡指的是形如 21 22.20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 的矩陣。問題有兩個 1.程式設計實現輸出這個矩陣 2.設1點的座標是 0,0 x方向向右為正,y方向向下為正.例如 7的座標為 1,1 2的座標為...
矩陣螺旋輸出
劍指 offer 29.順時針列印矩陣 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。1.用行增量和列增量決定下一步方向 2.到達邊界時,換方向 同時縮小邊界條件 3.當左右邊界,上下邊界重合時了,完成全部遍歷 param matrix return var spiralorder ...