用 Python 编写程序,通过小步和大步找到到达目的地所需的最佳步数
pythonserver side programmingprogramming更新于 2025/12/17 17:16:17
假设我们有一个查询列表 Q,其中每个查询 Q[i] 包含一个三元组 [a_i、b_i 和 d_i]。假设我们最初位于位置 (0, 0),那么我们可以一步从某个位置 (x1, y1) 移动到 (x2, y2),其中这两点之间的欧几里得距离至少为 a,最多为 b。现在,对于每个查询,我们必须找到从 (0, 0) 到达 (d_i, 0) 所需的最少步数。
因此,如果输入为 Q = [(2,3,1), (1,2,0), (3,4,11)],则输出将为 [2, 0, 3],因为对于从 (0, 0) 开始的第一个查询,a = 2,我们可以先走 $\left(\frac{1}{2},\frac{\sqrt{15}}{2}\right)$,然后是 (1, 0),所以我们需要两步,所以输出为 2,对于下一个查询,d 为 0,所以我们不需要移动任何步骤,所以输出为 0。对于第三个查询 b = 4 和 a = 3,将 (0, 0) 移动到 (4, 0),然后移动到 (8, 0),然后是 (11, 0)。
为了解决这个问题,我们将遵循以下步骤−
- 定义一个函数 steps() 。它将采用 a、b、d
- mmin := a、b 的最小值
- mmax := a、b 的最大值
- 如果 d 为 0,则
- 返回 0
- 如果 d 是 mmin 或 mmax,则
- 返回 1
- 如果 d < mmax,然后
- 返回 2
- 返回 (d / mmax) 的上限
- 从 main 方法中,执行以下操作 −
- res := a new list
- 对于 Q 中的每个 q,执行
- (a, b, d) := q
- 在 res 末尾插入步骤 (a, b, d) 的结果
- 返回 res
示例
让我们看看下面的实现以便更好地理解 −
from math import ceil def steps(a, b, d): mmin = min(a, b) mmax = max(a, b) if d is 0: return 0 if d in [mmin, mmax]: return 1 if d < mmax: return 2 return ceil(d / mmax) def solve(Q): res = [] for q in Q: a, b, d = q res.append(steps(a, b, d)) return res Q = [(2,3,1), (1,2,0), (3,4,11)] print(solve(Q))
输入
[(2,3,1), (1,2,0), (3,4,11)]
输出
[2, 0, 2.0]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

