题目 计算从位置 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
思路
步数一定是先从1加到cnt,然后又从cnt减为1,但可能会有两步步长一样长的情况。基本思路是首先计算出需要的最大步长序列(即1, 2, 3, ..., n,n-1,…,2,1),然后看这个序列能否直接到达目标位置,或者需要额外的步数。
步骤
首先用while循环得到最大步长cnt,并用总距离减去连续和得到剩余步长x
然后剩余步长x分情况讨论:
- 如果
x==0,说明步长序列之和正好等于需要移动的距离 - 如果
x > 0 && x <= cnt,说明在最大步长序列之后,还需要1步(步长不超过cnt)来到达目标位置,即存在两步步长一样长的情况 - 如果
x > cnt && x <= 2 * cnt,说明在最大步长序列之后,还需要2步(每一步步长不超过cnt)来到达目标位置,即存在两步步长一样长的情况