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