在Python中找到通过婴儿步和巨人步到达目标所需的最佳步数的程序

在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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程