C程式--第九屆藍橋杯--螺旋折線
標題:螺旋折線
如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。
對於整點(X, Y),我們定義它到原點的距離dis(X, Y)是從原點到(X, Y)的螺旋折線段的長度。
例如dis(0, 1)=3, dis(-2, -1)=9
給出整點座標(X, Y),你能計算出dis(X, Y)嗎?
【輸入格式】
X和Y
對於40%的資料,-1000 <= X, Y <= 1000
對於70%的資料,-100000 <= X, Y <= 100000
對於100%的資料, -1000000000 <= X, Y <= 1000000000
【輸出格式】
輸出dis(X, Y)
【樣例輸入】
0 1
【樣例輸出】
3
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
注意:
main函式需要返回0;
只使用ANSI C/ANSI C++ 標準;
不要呼叫依賴於編譯環境或作業系統的特殊函式。
所有依賴的函式必須明確地在原始檔中 #include <xxx>
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
#include<stdio.h>
int s=0;
int lx(int x,int y,int s)
{
if (x==0&&y==0) return s; //遞迴走到原點,返回S;
//螺旋線分為四種情況 ,每走一步判斷一次,S+1 ,迴圈遞迴
if (y>=-x&&y<x) return lx(x,y+1,s+1);// 原點右邊的線
if (y>=x&&y>-x) return lx(x-1,y,s+1);// 原點上面的線
if (y<=-x&&y>x+1) return lx(x,y-1,s+1);//原點左邊的線
if (y<=x+1&&y<-x) return lx(x+1,y,s+1);//原點下面的線
}
int main()
{
int x,y,i,j;
scanf ("%d %d",&x,&y);//輸入座標點
s=lx(x,y,0);//呼叫函式
printf ("x=%d,y=%d,s=%d",x,y,s);
return 0;
}