Python程序找出能容纳群内所有朋友的公交车的大小

假设有 n 个学生团体等待从他们的大学乘坐大学巴士返回他们的家。在每个学生组中,有 m 个学生。学生团体希望乘公共汽车旅行而不会分开。当且仅当他们小组的所有成员都可以上车时,他们才能上车。此外,如果前一组尚未上车或已到达目的地,则该组不会上车。如果给定组数和每个组的学生人数,我们必须找出公共汽车的大小,以便公共汽车可以运送所有小组,并且每次公共汽车从学院出发时都没有空位在公交车上。

因此,如果输入类似于组或 gr_no = [3, 4, 2, 2, 1, 4, 3, 5],那么输出将是 [12, 24]。

如果巴士大小为 12,则可以在第一次行程中包含 1 - 5 组,并在第二次行程中包含其余组。

如果巴士大小为 24,它可以包含所有团体,并且只能在一次旅行中运输。

示例

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

from functools import reduce
def solve(gr_no):
   total = [gr_no[0]]
   for i in range(1, len(gr_no)):
      total.append(total[i - 1] + gr_no[i])
   b_sizes = []
   for size in factor_ret(sum(gr_no)):
      temp_list = list(filter(lambda x : x % size == 0, total))
      index = 1
      indicator = True
      for point in temp_list:
         if point != size * index:
            indicator = False
            break
         index += 1
      if indicator:
         b_sizes.append(size)
   return b_sizes
def factor_ret(n):
   return sorted(set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0))))
print(solve([3, 4, 2, 2, 1, 4, 3, 5]))

输入

[3, 4, 2, 2, 1, 4, 3, 5]
输出结果
[12, 24]