首页 新闻 会员 周边 捐助

计算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
< >
分享
所有回答(2)
0

代码:

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
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册