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

コンテナにいくつかの金属棒を詰める操作の数を見つけるPythonプログラム


異なるサイズのいくつかの金属棒を輸送するタスクが与えられたとします。ただし、輸送コンテナの長さは短く、長さ1のバーのみを含めることができます。 n個のバーが提供され、それらの長さはリストで示されます。したがって、すべてのバーをコンテナに収めます。単位サイズになるように、すべてのバーをカットして分割する必要があります。さらに、1回の操作ですべてのバーをコンテナに収めることができます。バーで実行する必要のある操作の数を見つける必要があります。

コンテナにいくつかの金属棒を詰める操作の数を見つけるPythonプログラム

したがって、入力がinput_arr =[6、3、7]のようである場合、出力は22

になります。
  • サイズ6のバーをサイズ1のバーにするには、10回の操作を実行する必要があります。

  • サイズ3のバーをサイズ1のバーにするには、4つの操作を実行する必要があります。

  • サイズ7のバーをサイズ1のバーにするには、8つの操作を実行する必要があります。

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

  • 関数prime_find()を定義します。これにはinput_num

    が必要です
    • prime_check:=値Trueを含む((input_num-1)/ 2)のサイズフロア値の新しいリスト

    • 範囲3のp_numから(input_num)+1の平方根のフロアまで、2ずつ増やします。

      • prime_check [(p_num-3)/ 2のフロア値]がゼロ以外の場合、

        • Prime_checkの(p_num ^ 2-3)/ 2からp_numまでの範囲のフロア値の各要素について、実行します

          • prime_check [element]:=値Falseを含むサイズの新しいリスト(((input_num-p_num ^ 2)/(2 * p_num)+ 1))のフロア値

    • 0から(input_num-1)/ 2のフロア値までの範囲のiの場合、実行

      • prime_check[i]がTrueの場合-
        • 値2+2 * i + 3

          を含むリストを返します
  • 主な機能から、次のようにします-

    • prime_nums:=prime_find(10 ^ 6 + 100)
    • 結果:=0
    • input_arrの値ごとに、
        を実行します。
      • 結果:=結果+値
      • f_list:=新しいリスト
      • prime_numsのp_numごとに、
        • 値modp_numは0と同じですが、
          • f_listの最後にp_numを挿入
          • value:=(value / p_num)のフロア値
        • p_num ^ 2>値の場合、
          • 値>1の場合、
            • f_listの最後に値を挿入
          • ループを終了します

        • temp:=1
        • f_listの各p_numについて、逆の順序で実行します
          • 結果:=結果+温度
          • temp:=temp * p_num
    • 結果を返す

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

from math import floor,sqrt
def prime_find(input_num):
   prime_check = [True]*((input_num-1)//2)
   for p_num in range(3,floor(sqrt(input_num))+1,2):
      if prime_check[(p_num-3)//2]: prime_check[(p_num**2-3)//2::p_num] = [False] * ((input_num-p_num**2)//(2*p_num) + 1)
   return [2]+[2*i+3 for i in range((input_num - 1) // 2) if prime_check[i]]
def solve(input_arr):
   prime_nums = prime_find(10**6+100)
   result = 0
   for value in input_arr:
      result += value
      f_list = []
      for p_num in prime_nums:
         while value % p_num == 0:
            f_list.append(p_num)
            value //= p_num
         if p_num**2 > value:
            if value > 1:
               f_list.append(value)
         break
      temp = 1
      for p_num in f_list[-1::-1]:
         result += temp
         temp *= p_num
   return result
if __name__ == "__main__":
print(solve([6, 3, 7]))

入力

[6, 3, 7]

出力

22

  1. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal

  2. リスト内で最大の数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、リストの最大の要素を計算する必要があります。 ここでは、組み込み関数を使用して、問題ステートメントの解決策に到達します sort()関数の使用 例 # list list1 = [23,1,32,67,2,34,12] # sorting list1.sort() # printing the last element print("Largest element is:", list1[-1]) 出力 Largest in given array is 67