首页 新闻 会员 周边 捐助

计算A到B的最小步数

1
[待解决问题]

问题描述

AB 实验同学每天都很苦恼如何可以更好地进行 AB 实验,每一步的流程很重要,我们目标为了缩短所需的步数。

我们假设每一步对应到每一个位置。从一个整数位置 x 走到另外一个整数位置 y,每一步的长度是正整数,每步的值等于上一步的值 -1+0+1。求 xy 最少走几步。并且第一步必须是 1,最后一步必须是 1,从 xy 最少需要多少步。

样例说明

  • 整数位置 x6,另外一个整数位置 y12,我们需要从 x 走到 y,最小的步数为:1221,所以我们需要走 4 步。
  • 整数位置 x34,另外一个整数位置 y45,我们需要从 x 走到 y,最小的步数为:123221,所以我们需要走 6 步。
  • 整数位置 x30,另外一个整数位置 y50,我们需要从 x 走到 y,最小的步数为:12344321,所以我们需要走 8 步。

输入格式

输入包含 2 个整数 xy。(0<=x<=y<2^31

输出格式

对于每一组数据,输出一行,仅包含一个整数,从 xy 所需最小步数。

输入样例

6 12
34 45
30 50

输出样例

4
6
8
tegou的主页 tegou | 菜鸟二级 | 园豆:202
提问于:2024-09-30 17:02
< >
分享
所有回答(3)
1

代码:

include <iostream>

include <cmath>

int minSteps(int x, int y) {
int D = y - x;
int steps = 0;
int sum = 0;

while (sum < D || (sum - D) % 2 != 0) {  
    steps++;  
    sum += steps;  
}  

return steps;  

}

int main() {
int x, y;
while (std::cin >> x >> y) {
std::cout << minSteps(x, y) << std::endl;
}
return 0;
}

kiry7769 | 园豆:15 (初学一级) | 2024-10-01 09:46
0

先走出一个( 总和小于 $y - x$ 的 )( 最大的 ) 单峰数列, 然后就可以选择把数列中的某些数重复, 来凑到刚好数列和等于 $y-x$

TauLee01 | 园豆:202 (菜鸟二级) | 2024-10-07 16:26
0

根据@kiry7769的回复稍作修改格式。方便查看

def min_steps(x, y):  
    d = y - x  # 计算从 x 到 y 的距离  
    n = 0  
    total_steps = 0  
    
    # 直到我们找到可以达到 d 的步骤  
    while total_steps < d or (total_steps - d) % 2 != 0:  
        n += 1  # 增加一步  
        total_steps = n * (n + 1) // 2  # 计算前 n 步的总距离  
    
    return 2 * n  # 返回上升和下降的总步数  

# 输入样例  
inputs = [(6, 12), (34, 45), (30, 50)]  

# 处理每组输入并输出结果  
for x, y in inputs:  
    result = min_steps(x, y)  
    print(result)
谁是月光谁离城 | 园豆:516 (小虾三级) | 2024-10-15 14:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册