螺旋折线
如图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(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
import java.util.Scanner; public class Main7 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int y = sc.nextInt(); // x1为当前横坐标 y1为当前纵坐标 num为走多少步数 sum为一共走几步 int x1=0,y1=0,num=0,sum=0; a:while (true) { if (x1==x&&y1==y)break a; num++; if (num%2==1) //向左和上走 因为左和上 都是一样的步数 都是单数 { for (int i = 0; i < num; i++) { if (x1==x&&y1==y)break a; x1--; //没有满足x1==x&&y1==y 向左走 num sum++; } for (int i = 0; i < num; i++) { if (x1==x&&y1==y)break a; y1++;//没有满足x1==x&&y1==y 向上走 num sum++; } } else if (num%2==0) //向左和上走 因为右和下 都是一样的步数 都是双数 { for (int i = 0; i < num; i++) { if (x1==x&&y1==y)break a; x1++;//没有满足x1==x&&y1==y 向右走 num sum++; } for (int i = 0; i < num; i++) { if (x1==x&&y1==y)break a; y1--;//没有满足x1==x&&y1==y 向下走 num sum++; } } } System.out.println(sum); } }