题目:
标题:螺旋折线
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(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
代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
int n = max(abs(x), abs(y));//n表示的含义是该点在第几个正方形上面
int sum = 4 * (n - 1) * n;//sum先记录前n个完整正方形的轨迹长度
if (x == -n) //说明(x, y)在第一条边界线上面(正方形的左边)
{
sum += abs(y - (-1 * n));
cout << sum << endl;
return 0;
}
if (y == n) //说明(x, y)在第二条边界线上面(正方形的上边)
{
sum += abs(x - (-1 * n)) + 2 * n;
cout << sum << endl;
return 0;
}
if (x == n) //说明(x, y)在第三条边界线上面(正方形的右边)
{
sum += abs(y - n) + 4 * n;
cout << sum << endl;
return 0;
}
if (y == (-n)) //说明(x, y)在第四条边界线上面(正方形的下边)
{
sum += abs(x - n) + 6 * n;
cout << sum << endl;
return 0;
}
}
详细规律及解释请参考:https://blog.csdn.net/sm20170867238/article/details/88087607?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242