【問題描述】
73 74 75 76 77 78 79 80 81
72 43 44 45 46 47 48 49 50
71 42 21 22 23 24 25 26 51
70 41 20 7 8 9 10 27 52
69 40 19 6 1 2 11 28 53
68 39 18 5 4 3 12 29 54
67 38 17 16 15 14 13 30 55
66 37 36 35 34 33 32 31 56
65 64 63 62 61 60 59 58 57
看清以上數字排列的規律,設
1值所在
的座標為(0 ,
0 ),
x 方向向右為正,
y 方向向上為正。例如
7 的座標為(
-1 ,
1 ),
2 的座標為(0 ,
1 ),
17 的座標為(
-2 ,
-2 )。程式設計輸入任意點座標(x ,
y ),輸出所對應的數字。
【分析及設計】
該題是芬蘭某著名通訊裝置公司的面試題。
這是一道關於螺旋佇列的題目,該佇列從
1值所在的座標點
按順時針方向螺旋形成佇列。分析這種問題,我認為應該先建立座標,幸好問題中已經為我們做了這部分工作。 以
1 為原點,第一象限中對角線上的值為奇數的平方值;經過認真觀察,按原點向外擴散的方向,分別為1 ,
3 ,5 ,
7…… 的平方值。那麼接下來,我們就以這些平方值點為參照物來具體分析各種情況下座標點所對應的數值。 (
1 )
首先計算給定座標點x 、
y 值中絕對值最大的乙個,記為
a ,然後記(
a*2+1
)為n。那麼n2
值對所對應的座標點就是之前我們選定的參照物。 (
2 ) 如果
x 的絕對值最大,就
x 的正負分別分析。如果
x 為正,則座標點在第一象限,這種情況下,我們應該選定
(n-2)2
作為參照物,因為座標點(a ,
a )與(a ,
a-1 )間數值有乙個突變。該座標點數值可以表示為(
n-2 )2 +
(a-y
);否則,該座標點數值可以表示為
n2 -2*a-(a-y) 。
(3 )
如果y的絕對值最大,同樣以其正負分別處理。若
y 為正,座標點數值可以表示為
n2- (
a-x );否則,其數值為
n2 -4*a-
(x-(-a
))。 (
4 )
最後處理特殊情況。(0 ,
0 )座標點對應數值為
1 ,(a ,
a )座標點對應數值為n2
。 【具體實現】
我是用c
語言在ubuntu
上實現的,具體**如下。鑑於**的具體實現非常簡單,這裡就不多說了。
螺旋佇列演算法分析
螺旋佇列的樣子如下圖 兩大規律 1。螺旋規律 紅線 2。奇數平方規律 紫線 問題描述 設1的座標是 0,0 的方向向右為正,y方向向下為正,例如,7的座標為 1,1 2的座標為 0,1 程式設計實現輸入任意一點座標 x,y 輸出所對應的數字!問題解決 從紫線突破。從圖中不難發現,右上角vc 2 t ...
螺旋佇列演算法分析
螺旋佇列的樣子如下圖 兩大規律 1。螺旋規律 紅線 2。奇數平方規律 紫線 問題描述 設1的座標是 0,0 的方向向右為正,y方向向下為正,例如,7的座標為 1,1 2的座標為 0,1 程式設計實現輸入任意一點座標 x,y 輸出所對應的數字!問題解決 從紫線突破。從圖中不難發現,右上角vc 2 t ...
螺旋佇列演算法分析
1 螺旋規律 2 奇數 圈數,或x軸正座標 平方規律 紫線 設1的座標是 0,0 x方向向右為正,y方向向下為正,例如,7的座標為 1,1 2的座標為 1,0 程式設計實現輸入任意一點座標 x,y 輸出所對應的數字!從紫線突破。從圖中不難發現,每圈最大值max 2 c 1 2 c 1 c為由內往外的...