螺旋佇列的樣子如下圖:
兩大規律:
1。螺旋規律(紅線)
2。奇數平方規律(紫線)
問題描述:
設1的座標是(0,0),的方向向右為正,y方向向下為正,例如,7的座標為(-1,-1),
2的座標為(0,1)。程式設計實現輸入任意一點座標(x,y),輸出所對應的數字!
問題解決:
從紫線突破。從圖中不難發現,右上角vc=(2*t+1)(2*t+1),t為該圈x,y座標的絕對值的最大值。例如vc=9、25、49、81........,算出vc後,就分4個判斷區域,分別判斷,點落在該圈4條邊的哪條邊上,從而計算出具體座標點的值。
四個區域劃分如下圖:
4個區域內4條邊上的值u與vc的對應關係為:
y=-t區:u = vc+(x+y);
x=-t區:u = vc+(3*x-y);
y=t區:u = vc + (-x - 5*y);
x=t區:u = vc+(-7*x+y);
那麼這些關係是怎麼得出來的呢?再看圖中畫上圈的數字:
在y=-t區,y座標不變,x座標變化步長為1。令x=0,此時,u=vc+y作為該邊的基準值,其他值隨x的變化而變化,得在該區域u=vc+(x+y);
同理,在x=-t區,x座標不變,y座標變化步長為1。令y=0,此時,u=vc+3*x作為該邊的基準值,其他值隨y的變化而變化,得在該區域u=vc+(3*x-y);
同理得其他倆區域的表示式。不再贅述。
#define abs(a) ((a)>0?(a):(-a))
#define max(a,b) ((a)>(b)?(a):(b))
int spiralval(int x,int y)
int main()
cin.get();
return 0;
}
螺旋佇列演算法分析
螺旋佇列的樣子如下圖 兩大規律 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為由內往外的...
螺旋佇列演算法分析
題目描述 設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...