Python程序:查找能容纳所有朋友组的巴士大小

Python程序:查找能容纳所有朋友组的巴士大小

假设有 n 个学生组等待通过大巴车从学校返回家中。每个学生组有 m 名学生。学生组希望通过大巴车旅行,而不会被分开。他们只有当他们组的所有成员都可以上车时才会上车。此外,如果他们之前的组没有上车或已经到达他们的目的地,则该组不会上车。如果我们知道组数和每组学生数,我们必须找出巴士的大小,以便能够运输所有组,并且每次巴士从学院出发时,巴士内没有空位。

因此,如果输入为 groups 或 gr_no = [3, 4, 2, 2, 1, 4, 3, 5],则输出将为 [12, 24]。

如果巴士大小为 12,则它可以容纳第一次旅行的 1 到 5 组,其余组可以在第二次旅行中完成。

如果巴士大小为 24,则它可以容纳所有组并在单次旅行中运输它们。

为了解决这个问题,我们将按以下步骤进行操作−

  • 定义一个函数 factor_ret()。这将需要 n 作为参数。
    • 对于 i 在范围从 0 到 n ^ 0.5 之间,执行以下操作:
      • 如果 n mod i 与 0 相同,则
      • 将元组( i,n/i 的下取整)加入到 output_list 中。
    • 对列表 output_list 进行排序。
    • 将 output_list 作为集合返回。
  • 现在执行以下步骤−
  • total:包含项 gr_no[0] 的新列表。
  • 对于 i 在范围从 1 到 gr_no 的大小之间,执行以下操作:
    • 在总结尾处插入 total[i – 1] + gr_no[i] 。
  • b_sizes:一个新的列表。
  • 对于 gr_no 列表之和的每个 size,执行以下操作:
    • 使用 total 从所有非零元素创建新列表。
    • index:为 1。
    • indicator:为 True。
    • 对于 temp_list 中的每个 point,执行以下操作:
      • 如果 point 不等于 size * index,则
      • indicator:为 False。
      • 退出循环。
      • index:index + 1。
    • 如果 indicator 为 True,则
      • 将 size 插入到 b_sizes 的末尾。
  • 返回 b_sizes。

更多Python相关文章,请阅读:Python 教程

示例

接下来是一个实现的例子,以便更好地理解−

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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程