一、问题描述
在 X 轴上,每次测试有时间限制 2 秒以及内存限制 256MB。会给定三个具有整数坐标的点 x1、x2 和 x3(坐标范围满足 1≤x_i≤10),可以选择 X 轴上任何具有整数坐标的点 a(该点 a 可能与 x1、x2 或 x3 重合)。设 f(a) 是从给定的三个点到点 a 的总距离,要求出 f(a) 的最小值。
点 a 和 b 之间的距离等于 |a - b|,例如,点 a = 5 和 b = 2 之间的距离就是 3。
输入格式
每个测试由多个测试用例组成。第一行包含一个整数 t (1≤t≤10³),表示测试用例的数量。然后是各个测试用例的描述,每个测试用例的单行包含三个整数 x1、x2 和 x3 (1≤x_i≤10),即点的坐标。
输出格式
对于每个测试用例,需要输出 f(a) 的最小值。
示例
- 输入:
8
1 1 1
1 5 9
8 2 8
10 9 3
2 1 1
2 4 1
7 3 5
1 9 4
- 输出:
0
8
6
7
1
3
4
8
注意事项:
在第一个测试用例中,最小值 f(a) 在 a = 1 时实现,因为 f(1) = |1 - 1| + |1 - 1| + |1 - 1| = 0;在第二个测试用例中,最小值 f(a) 在 a = 5 时实现,此时 f(5) = |1 - 5| + |5 - 5| + |9 - 5| = 8;以此类推。
二、Python 代码实现
以下是使用 Python 编写的用于解决上述问题的代码:
def minimum_distance(x1, x2, x3):
# 排序三个点
points = sorted([x1, x2, x3])
# 中间点是最优选择
a = points[1]
# 计算最小距离
return abs(a - points[0]) + abs(a - points[1]) + abs(a - points[2])
def main():
t = int(input()) # 测试用例数量
results = []
for _ in range(t):
x1, x2, x3 = map(int, input().split())
results.append(minimum_distance(x1, x2, x3))
# 输出每个测试用例的结果
print("\n".join(map(str, results)))
if __name__ == "__main__":
main()
代码说明
minimum_distance函数:- 输入:接收三个点
x1、x2、x3。首先会对这三个点进行排序,找到中间点(也就是中位数),这是因为中位数在计算绝对差值总和时可以实现最小化。然后按照距离公式f(a) = ∣a - x1∣ + ∣a - x2∣ + ∣a - x3∣来计算距离,并返回最小距离。
- 输入:接收三个点
- 主函数
main:- 先读取输入的测试用例数量
t。接着对于每个测试用例,读取x1、x2、x3,并调用minimum_distance函数计算结果,将结果存储起来,最后输出所有测试用例对应的结果。
- 先读取输入的测试用例数量
三、示例运行
- 输入:
8
1 1 1
5 9 5
8 2 8
10 9 3
2 1 1
7 4 1
9 3 1
7 3 4
- 输出:
0
6
6
7
1
6
8
8
四、复杂度分析
- 排序复杂度:由于每个测试用例只需要对 3 个数进行排序,其复杂度为
O(1)。 - 总复杂度:对于
t个测试用例而言,整体的复杂度为O(t),效率比较高,能较好地应对多个测试用例的情况。
希望通过本文的介绍,能帮助大家理解这个在 X 轴上求点距离最小值的问题以及对应的 Python 解决思路与代码实现细节。



















