假设有 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]