關於螺旋矩陣的說法不一,這裡指的是形如
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的座標為(0,1),3的座標為(1,1).程式設計實現輸入任意一點座標 (x,y),輸出所對應的數字。
1. 第乙個問題我是採用模擬進行構造的,可以看到從1開始的方向變化始終是 right->down->left->up,
所持續走的長度為1->1->2->2->3->3->4->4...,發現了這個規律不難寫出**了!
void luxuanmatrix(int n)
data[x][y] = num++;
}count++;
if(count == 2)
dir = (dir + 1) % 4;}}
2. 第二個問題也是先找出規律,我們可以把它看成是一層一層往外擴充套件的,第0層為乙個1,第一層為2到9.。。。第t層共有(2t-1)*(2t-1)個數,第t+1層會從(2t-1)*(2t-1)+1開始往外螺旋,給定座標(x,y)就知道該點存在的層數 t=max(|x|,|y|)。
(取自《程式設計師面試寶典》(第四版)96頁)
int foo(int x, int y) else if(y == -t) else if(y == t) else
v += y - t;
return v;}
輸出螺旋矩陣
螺旋矩陣 是指乙個呈螺旋狀的矩陣,它的數字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此迴圈。如圖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 ...
矩陣螺旋輸出
劍指 offer 29.順時針列印矩陣 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。1.用行增量和列增量決定下一步方向 2.到達邊界時,換方向 同時縮小邊界條件 3.當左右邊界,上下邊界重合時了,完成全部遍歷 param matrix return var spiralorder ...
輸出螺旋矩陣 二
輸出這樣的二維陣列 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15 16 22 23 25 sub spiralmetrix byval n as integer n n 1 dim i as integer,j as integer,a ...