Python程序:计算圆形管道中球体碰撞次数


假设,在一个圆形管道中有n个球体。管道长100米,最初,每个球体在管道中距离我们称之为起点的某一点i米。现在,这些球体开始在管道内以不同的方向做圆周运动。球体在管道内以每秒0.1米的速度运动。当两个球体在某一点相遇时,就会发生碰撞,球体会改变运动方向。如果这个过程持续很长时间,比如10^9 + 6秒;我们需要找出球体发生碰撞的次数。球体与起点的初始距离作为输入给出。

因此,如果输入类似于input_array = [0, 10],则输出将为400000。

有两个球体,它们的初始距离从起跑线开始作为输入给我们。如果它们的方向相同,它们永远不会发生碰撞。但是,如果它们的方向不同,它们会在一段时间内发生碰撞。一个球体与另一个球体恰好碰撞400000次。

为了解决这个问题,我们将遵循以下步骤:

  • 对列表input_array进行排序
  • size := input_array的大小
  • lap_count := (10^5)*2
  • output := 2 * lap_count * floor(size / 2) * (size - floor(size / 2))
  • stop := 0
  • for i in range 0 to size - 1, do
  • if stop不等于1,则
    • if input_array[i] + 1等于input_array[i+1],则
      • output := output + 2
      • stop := 1
    • 否则,
      • stop := 0
  • 否则,
    • stop := 0
  • return output

示例

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

 在线演示

def solve(input_array):
   input_array.sort()
   size = len(input_array)
   lap_count = (10**5)*2
   output = 2*lap_count*(size//2)*(size - size//2)
   stop = 0
   for i in range(size - 1):
      if stop != 1:
         if input_array[i] + 1 == input_array[i+1]:
            output+=2
            stop = 1
         else:
            stop = 0
      else:
         stop = 0
   return output
print(solve([0, 10]))

输入

[0, 10]

输出

400000

更新于:2021年5月18日

187 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告