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]foriinrange(1,int(n**0.5)+1)ifn%i==0)))) print(solve([3, 4, 2, 2, 1, 4, 3, 5]))
输入
[3, 4, 2, 2, 1, 4, 3, 5]输出结果
[12, 24]