螺旋佇列演算法分析

2022-04-12 06:19:07 字數 2633 閱讀 4978

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)

1

/**2

* 列印螺旋數列3*

4* @author

nathan5*

6*/7public

class

spiralseq

13system.out.println();14}

15}1617

private

static object spiral(int x, int

y) else

if (x == -c) else

if (y == c) else 30}

3132

private

static

int max(int n1, int

n2)

3536

private

static

int abs(int

x) 39 }

output:

1   111  112  113  114  115  116  117  118  119  120  121

2 110 73 74 75 76 77 78 79 80 81 82

3 109 72 43 44 45 46 47 48 49 50 83

4 108 71 42 21 22 23 24 25 26 51 84

5 107 70 41 20 7 8 9 10 27 52 85

6 106 69 40 19 6 1 2 11 28 53 86

7 105 68 39 18 5 4 3 12 29 54 87

8 104 67 38 17 16 15 14 13 30 55 88

9 103 66 37 36 35 34 33 32 31 56 89

10 102 65 64 63 62 61 60 59 58 57 90

11 101 100 99 98 97 96 95 94 93 92 91

螺旋佇列演算法分析

螺旋佇列的樣子如下圖 兩大規律 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為由內往外的...