1、螺旋規律
2、奇數(圈數,或x軸正座標)平方規律(紫線)
設1的座標是(0,0),x方向向右為正,y方向向下為正,例如,7的座標為(-1,-1),2的座標為(1,0)。程式設計實現輸入任意一點座標(x,y),輸出所對應的數字!
從紫線突破。
從圖中不難發現,每圈最大值max=(2*c+1)(2*c+1),c為由內往外的圈數,c>=0。如圖每圈最大值分別是1、9、25、49、81........,算出每圈的max後,就分4條邊分別計算每圈的其他值。通過座標落在該圈4條邊的哪條邊上,按照不同的公式計算出具體座標點的值。
以第3圈(max=49)為例,4條邊劃分如下圖(以顏色區分):
這裡先給出4條邊上各座標上的值與max的對應關係為:
上邊:utop = max+(x+y);
左邊: uleft= max+(3*x-y);
下邊:ubottom = max + (-x - 5*y);
右邊:uright = max+(-7*x+y);
那麼這些關係是怎麼得出來的呢?再看圖中畫上圈的數字(將其值表示為topbase,xxbase),我們稱其為每條邊的基準值:
在上邊,y座標不變,x座標變化步長為1。令x=0,此時,topbase=max+y作為該邊的基準值,其他值隨x的變化而變化,得在該區域u=max+y+x;
同理,在左邊,x座標不變,y座標變化步長為1。令y=0,此時,u=max+3*x作為該邊的基準值,其他值隨y的變化而變化,得在該區域u=vc+3*x-y;
同理得其他倆區域的表示式。不再贅述。
觀察這些基準值與max值之間關係,不難發現,這些基準值與max之間的差分別是1c(上邊),3c(左邊),5c(下邊),7c(右邊)(c表示當前圈數),在上邊和下邊,y座標表示(或等於)圈數(即c=y),而在左邊和右邊,x座標表示(或等於)圈數(即c=x)。因此前面提到的差值又可用座標表示成1y,3x,5y,7x。因此就產生了各邊基準值的計算公式:
topbase=max+y
leftbase=max+3x
bottombase=max-5y
rightbase=max-7x
(注意座標的符號,負數加,正數減,因為基準值肯定都比max要小)
下面得出每條邊的值,首先考慮上邊和下邊,這2條邊,在基準值的基礎上,由x座標控制增減,因此:
topvalue=topbase+x=max+y+x(上邊,隨x贈而贈,因此是加x)
bottomvalue=bottombase-x=max-5y-x(下邊,隨x贈而減,因此是減x)
同理,左邊和右邊,則在基準值的基礎上,由y座標控制增減,因此:
leftvalue=leftbase-y=max+3x-y(左邊,隨y贈而減,因此是減y)
rightvalue=rightbase+y=max-7x+y(右邊,隨y贈而贈,因此是加y)
output:/**
* 列印螺旋數列
* * @author nathan
* */
public
class
spiralseq
system.out.println();}}
private
static object spiral
(int x, int y)
else
if (x == -c)
else
if (y == c)
else
}private
static
intmax
(int n1, int n2)
private
static
intabs
(int x)
}
111
112113
114115
116117
118119
120121
1107374
7576
7778
7980
8182
1097243
4445
4647
4849
5083
1087142
2122
2324
2526
5184
1077041207
891027
5285
1066940196
121128
5386
1056839185
431229
5487
1046738
1716
1514
1330
5588
1036637
3635
3433
3231
5689
1026564
6362
6160
5958
5790
10110099
9897
9695
9493
9291
螺旋佇列演算法分析
螺旋佇列的樣子如下圖 兩大規律 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的座標是 0,0 x方向向右為正,y方向向下為正,例如,7的座標為 1,1 2的座標為 1,0 程式設計實現輸入任意一點座標 x,y 輸出所對應的數字!有圖可知 每圈最大值max 2 c 1 2 c 1 c為由內往外的圈數,c 0。1為第0圈 上邊 utop max x y 左邊 ul...