螺旋折线

如图所示的螺旋折线经过平面上所有整点恰好一次。

 

 

 


对于整点(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);
    }
}

 

posted @ 2020-03-02 16:39  智阿广  阅读(256)  评论(0)    收藏  举报