在 Python 中查找收集等距物品所覆盖的距离


假设要组织一场比赛。在道路上放置不同的石头。比赛起点有一个桶,距离第一块石头 6 个单位。其他石头彼此相隔 4 个单位,并依次排成一条直线。现在,参赛者从桶开始,然后收集最近的石头,返回并将石头放入桶中,然后再次跑出去收集下一个最近的石头,跑回来,并将其放入桶中。这个过程将持续到所有石头都被放入桶中。如果石头数量为 n,那么我们必须找到参赛者需要覆盖的总距离。

因此,如果输入像 n = 5,则输出将为 140,因为 2*6 + 2(6 + 4) + 2(6 + 4 + 4) + 2(6 + 4 + 4 + 4) + 2(6 + 4 + 4 + 4 + 4) = 140

为了解决这个问题,我们必须解决以下方程式:

  • 对于石头 1,我们必须覆盖 (6+6) = 2*6 的距离

  • 对于石头 2,我们必须覆盖 ((6+4)+(6+4)) = 2*(6+4) 的距离

  • 对于石头 3,我们必须覆盖 ((6+4+4)+(6+4+4)) = 2*(6+4+4) 的距离

  • 对于石头 n,我们必须覆盖 ((6+4*(n-1))+(6+4*(n-1))) = 2*(6+4*(n-1)) 的距离

对于所有石头,我们必须覆盖:

  • D = 2*6 + 2*(6+4) + 2*(6+4+4) + … + 2*(6+4*(n-1))

  • D = 2*[6 + (6+4) + (6+2*4) + … + (6+(n-1)*4)]

  • D = 2*[6n + 4(1 + 2 + … + (n-1))]

  • D = 2*[6n + 4(n*(n-1)/2)]

  • D = 2*[6n + 2(n*(n-1))]

示例

让我们看看以下实现以获得更好的理解:

在线演示

def find_distance(n):
   return 2*(6*n + 2*((n-1)*n))
n = 5
print(find_distance(n))

输入

5

输出

140

更新于: 2020年8月19日

74 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告