C++代码查找兔子拉箱子的总时间
假设我们有两个坐标 (x1, y1) 和 (x2, y2)。一只兔子正在拉食物箱。它用一根只有1个单位长度的绳子系着箱子。兔子会把箱子拉到它站立的位置,然后在同一方向上再移动1个单位离开。兔子可以向右、左、上或下移动1个单位,而不用拉箱子。在这种情况下,它不需要正好距离箱子1个单位。如果它想再次拉箱子,它必须走到箱子旁边的一个点。兔子可以从任意点开始。它在任何方向上移动1个单位需要1秒。我们需要找到将箱子从起始位置移动到结束位置所需的最短时间。
因此,如果输入类似于 x1 = 1; y1 = 1; x2 = 2; y2 = 2,则输出将是 4,因为兔子可以从点 (2,1) 开始。它在 (3,1) 的位置时将箱子拉到 (2,1)。然后移动到 (3,2),然后移动到 (2,2) 而不用拉箱子。然后,在移动到 (2,3) 的同时将箱子拉到 (2,2)。这需要 4 秒。
步骤
为了解决这个问题,我们将遵循以下步骤:
s := 0 if x1 is not equal to x2 and y1 is not equal to y2, then: s := |x2 - x1| + |y2 - y1| Otherwise s := |x2 - x1| + |y2 - y1| return s
示例
让我们看看以下实现以更好地理解:
#include <bits/stdc++.h> using namespace std; int solve(int x1, int y1, int x2, int y2){ int s = 0; if (x1 != x2 && y1 != y2) s = abs(x2 - x1) + abs(y2 - y1) + 2; else s = abs(x2 - x1) + abs(y2 - y1); return s; } int main(){ int x1 = 1; int y1 = 1; int x2 = 2; int y2 = 2; cout << solve(x1, y1, x2, y2) << endl; }
输入
1, 1, 2, 2
输出
4
广告