Python
 Computer >> コンピューター >  >> プログラミング >> Python

グループ内のすべての友達を収容できるバスのサイズを調べるPythonプログラム


大学のバスで大学から自宅に戻るのを待っている学生グループがn人いるとします。各学生グループには、m人の学生がいます。学生グループは、離れることなくバスで旅行したいと考えています。彼らは、グループのすべてのメンバーがバスに乗れる場合に限り、バスに乗ります。また、前のグループがバスに乗車していないか、すでに目的地に到着している場合、グループはバスに乗車しません。グループの数と各グループの学生の数が与えられた場合、バスがすべてのグループを輸送できるようにバスのサイズを調べる必要があり、バスが大学から出発するたびに空きスペースはありませんバスの中で。

したがって、入力がグループのようなものであるか、gr_no =[3、4、2、2、1、4、3、5]の場合、出力は[12、24]になります。

バスのサイズが12の場合、最初のトリップでグループ1〜5を含み、2番目のトリップで残りのグループを含めることができます。

バスのサイズが24の場合、すべてのグループを含めることができ、1回の旅行でのみ輸送できます。

これを解決するには、次の手順に従います-

  • 関数factor_ret()を定義します。これにはn
      かかります
    • 範囲(0〜n ^ 0.5)のiの場合、実行
      • n mod iが0と同じ場合、
        • タプル(i、(n / i)のフロア値)をoutput_listに追加します
    • リストoutput_listを並べ替える
    • output_listをセットとして返す
  • 次の手順を実行します-
  • total:=アイテムgr_no [0]
  • を含む新しいリスト
  • 範囲1からgr_noのサイズのiの場合は、
    • 合計の最後にtotal[i-1]+gr_no[i]を挿入します
  • b_sizes:=新しいリスト
  • factor_ret(リストの合計(gr_no))のサイズごとに、
      を実行します。
    • temp_list:=合計のゼロ以外のすべての要素からの新しいリスト
    • インデックス:=1
    • インジケーター:=True
    • temp_listの各ポイントについて、
      • ポイントがサイズ*インデックスと同じでない場合、
        • インジケーター:=False
        • ループから抜け出す
      • index:=index + 1
    • インジケーターがTrueの場合、
      • b_sizesの最後にサイズを挿入
  • return b_sizes

理解を深めるために、次の実装を見てみましょう-

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]

  1. グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム

    0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ

  2. Pythonでgodownに入れることができるボックスの数を調べるプログラム

    整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは、左からでも右からでも、どの側からでもゴダウンに入れることができます。ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押