计算从位置 x 到 y 的最少步数
问题描述
小F正在进行一个 AB 实验,需要从整数位置 x
移动到整数位置 y
。每一步可以将当前位置增加或减少,且每步的增加或减少的值必须是连续的整数(即每步的移动范围是上一步的 -1
,+0
或 +1
)。首末两步的步长必须是 1
。求从 x
到 y
的最少步数。
输入描述
输入包含两个整数 x
和 y
,表示起始位置和目标位置。
输出描述
输出从 x
到 y
所需的最小步数。
测试样例
样例1:
输入:
x_position = 12, y_position = 6
输出:4
样例2:
输入:
x_position = 34, y_position = 45
输出:6
样例3:
输入:
x_position = 50, y_position = 30
输出:8
样例4:
输入:
x_position = 0, y_position = 0
输出:0
核心思想:下降期必然是均匀下降,上升期间可能有匀速
def solution(x_position, y_position):
# Please write your code here
diff = abs(x_position - y_position)
n = 0
dif = diff // 2
x = 1
while (1 + x) * x / 2 <= dif:
x += 1
x -= 1
n += 2 * x
shen = diff - (1 + x) * x
x += 1
while shen > 0:
n += shen // x
shen %= x
x -= 1
return n