藍橋杯——螺旋折線
阿新 • • 發佈:2019-01-04
第七題:螺旋折線
如圖所示的螺旋折線經過平面上所有整點恰好一次。 對於整點(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
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。 不要使用> package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效程式碼處理。import java.util.Scanner; public class 螺旋折線 { /** * @param args */ static int sum=0; static int dir[][]={{0,1},{1,0},{0,-1},{-1,0}}; public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s[]=sc.nextLine().split("\\s+"); int x=Integer.valueOf(s[0]); int y=Integer.valueOf(s[1]); int xs=-1; int ys=0; int f=0; for (;;) { xs=xs+dir[f][0]; ys=ys+dir[f][1]; sum++; if(xs==x && ys==y){ break; } if(xs<0 && ys<0){ if(Math.abs(ys)*2==Math.abs(xs)){ f=(f+1)%4; } }else { if(Math.abs(ys)==Math.abs(xs)){ f=(f+1)%4; } } } System.out.println(sum+1); } }