在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 = 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)的上限
- 从主方法中执行以下操作−
- res:一个新的列表
- 对于Q中的每个q,执行以下操作
- (a,b,d):= q
- 将步骤(a,b,d)的结果插入res的末尾
- 返回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]