Python程序:在一个圆形管中找出球碰撞的次数
设有n个球在一个圆形管中。这个管子长100米,最初,管中的每个球距离一个我们称为起点的点i米。现在,球以不同的方向按圆形顺序在管子内行驶。球在管子里行进0.1米/秒。当两个球在一个点相遇时,发生碰撞并改变它们的运动方向。如果这个过程进行了很长的时间,比如说10^9 + 6秒,我们必须找出球碰撞的次数。球的起始距离从起点给出输入。
因此,如果输入为input_array = [0, 10],那么输出将是400000
这里有两个球,它们的起始线距离由我们的输入给出。如果它们的方向相同,它们将永远不会碰撞。但是,如果它们的方向不同,它们将在碰撞时间内相遇。一个球会精确地和另一个球在400000次碰撞中相遇。
为了解决这个问题,我们将按照以下步骤进行 −
- 对输入数组进行排序
- size := input_array的大小
- lap_count := (10^5)*2
- output := 2 * lap_count * (size / 2的地板函数) * (size – size / 2的地板函数)的值
- stop := 0
- 对于在范围0到size – 1的i,做以下操作
- 如果stop不等于1,则如果input_array [i] +1等于input_array [i + 1],则
- 输出:output + = 2
- stop := 1
- 否则,
- stop := 0
-
否则,
-
stop := 0
- 返回output
更多Python相关文章,请阅读:Python 教程
示例
让我们看看以下实现,以便更好地理解 −
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