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

Pythonで繰り返し整数を配布するプログラム


配列numがあるとすると、最大50個の一意の値があります。また、quantityという別の配列があります。ここで、quantity [i]は、i番目の顧客が注文した値の量を示します。次のような数値を配布できるかどうかを確認する必要があります

  • i番目の顧客は正確に数量[i]のアイテムを受け取ります

  • i番目の顧客が得る価値はすべて等しく、

  • すべてのお客様が満足しています。

したがって、入力がnums =[5,1,2,2,3,4,4,3,3] amount =[2,2,3]のようである場合、2人の顧客が2つの要素を必要としているため、出力はTrueになります。それぞれ、[2,2]と[4,4]を取得でき、3番目のアイテムは3つのアイテムが必要なので、[3,3,3]を取得できるので、すべて満足しています。

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

  • 関数util()を定義します。これにはi、cntrが必要です

  • iが数量のサイズと同じである場合、

    • Trueを返す

  • temp_counter:=cntrのコピーを作成する

  • cntrの各cntについて、実行します

    • cnt> =amount [i]の場合、

      • temp_counter [cnt]:=temp_counter [cnt]-1

      • temp_counter [cnt]が0と同じ場合、

        • temp_counterからcnt-th要素を削除します

      • rem:=cnt-数量[i]

      • temp_counter [rem]:=temp_counter [rem] + 1

      • util(i + 1、temp_counter)がtrueの場合、

        • Trueを返す

      • temp_counter [rem]:=temp_counter [rem]-1

      • temp_counter [rem]が0と同じ場合、

        • temp_counterからrem-th要素を削除します

    • temp_counter [cnt]:=temp_counter [cnt] + 1

  • Falseを返す

  • メインの方法から、次のようにします

  • cnt:=numsに存在する数値のすべての頻度の頻度を保持するマップ

  • 数量を逆の順序で並べ替える

  • util(0、cnt)を返す

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

from collections import Counter
def solve(nums, quantity):
   def util(i, cntr):
      if i == len(quantity):
         return True

      temp_counter = cntr.copy()
      for cnt in cntr:
         if cnt >= quantity[i]:
            temp_counter[cnt] -= 1
            if temp_counter[cnt] == 0:
               temp_counter.pop(cnt)
         rem = cnt - quantity[i]
         temp_counter[rem] += 1

         if util(i+1, temp_counter):
            return True

         temp_counter[rem] -= 1
         if temp_counter[rem] == 0:
            temp_counter.pop(rem)
         temp_counter[cnt] += 1

      return False

   cnt = Counter(Counter(nums).values())
   quantity.sort(reverse=True)
   return util(0, cnt)

nums = [5,1,2,2,3,4,4,3,3]
quantity = [2,2,3]
print(solve(nums, quantity))

入力

[0,1,2,3,4], [[3,1],[1,3],[5,6]]

出力

True

  1. クイックソート用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、クイックソートの概念を使用して配列を並べ替える必要があります ここでは、最初に配列をパーティション化し、別のパーティションを並べ替えて、並べ替えられた配列を取得します。 次に、以下の実装のソリューションを見てみましょう- 例 # divide function def partition(arr,low,high):    i = ( low-1 )    pivot = arr[high] # pivot element   &nb

  2. Pythonプログラムへの単純な関心

    この記事では、Python3.xでの単利の計算について学習します。またはそれ以前。 単純な関心 は、1日の利率に元本を掛け、支払いの間に経過した日数を掛けて計算されます。 数学的に 単利=(P x T x R)/ 100 どこで、 Pは元本です Tは時間であり Rはレートです たとえば、 P =1000の場合、R =1、T =2 次にSI=20.0 それでは、Pythonで単純な利息計算機を実装する方法を見てみましょう。 例 P = 1000 R = 1 T = 2 # simple interest SI = (P * R * T) / 100 print(&