螺旋佇列演算法分析

2021-09-24 13:14:39 字數 2741 閱讀 4478

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)

/**

* 列印螺旋數列

* * @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)

}

output:

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...