在 Python 中寻找婴儿和大步到达目的地所需的最佳步数的程序
假设我们有一个查询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=3move(0,0)到(4,0)然后到(8,0)然后再到(11,0)。
示例
让我们看看以下实现以获得更好的理解-
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]