返回题解分享
讨论 / 题解分享/ 帖子详情

螺旋折线(编程题) - 题解

有几个特殊的点(a, a), (a, -a), (-a, -a)比如从(a, a)出发,设n = 2 * a,那么接下来变化规律为n, n - 1, n-1,n-2,n-2 .... 2,2,1,1,直接用求和公式算即可,其他两个点也是这个规律,就是第一项需要做一下处理,根据点的坐标判断这个点是在正方形的哪条变上,然后映射到离他近的这三个点中的一个即可。

[x, y] = list(map(int, input().strip().split(' ')))
d_x, d_y = 0, 0
res = 0
if abs(x) == abs(y):
    d_x = x
    d_y = y
elif x >= 0 and abs(y) < abs(x):  # 这个点在正方形的右边,映射到(x, x)
    d_x = x
    d_y = x
    res += abs(y - d_y)  # 补上路程
elif abs(y) > abs(x):   # 这个点在正方形的上下两条边,映射到(-y, y)
    d_y = y
    d_x = -y
    res += abs(x - d_x)  
else:                # 这个点在正方形的左边,第三象限的顶点横纵坐标绝对值不等,我们映射到第二象限的顶点
    d_x = x
    d_y = -x
    res -= abs(y - d_y)  # 这样映射实际上多走了路程,需要减掉
n = 0
if d_x > 0 and d_y > 0:   #第一象限的顶点规律为5,4,4,3,3 ...
    n = d_x * 2         
    res += (1 + n)* n - n  # 去掉多加的一个n
elif d_x > 0 and d_y < 0:
    n = d_x * 2
    res += (1 + n) * n
elif d_x < 0 and d_y > 0:
    n = d_y * 2 - 1
    res += (1 + n) * n
else:
    res = 0
print(res)
0 回复 0 转发 0 喜欢 0 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!