C++で指定された金額に合計される紙幣と値の最小数を見つけます
そのような金額があり、指定された金額になる、さまざまな金種のノートの最小数を見つける必要があるとします。最高額の紙幣から始めて、与えられた金額で可能な限り多くの紙幣を見つけるようにしてください。ここでは、{2000、500、200、100、50、20、10、5、2、1}の量が無限であると仮定しています。したがって、金額が800の場合、ノートは500、200、100になります。
ここでは、貪欲なアプローチを使用してこの問題を解決します。
例
#include<iostream> using namespace std; void countNotes(int amount) { int notes[10] = { 2000, 500, 200, 100, 50, 20, 10, 5, 2, 1 }; int noteFreq[10] = { 0 }; for (int i = 0; i < 10; i++) { if (amount >= notes[i]) { noteFreq[i] = amount / notes[i]; amount = amount - noteFreq[i] * notes[i]; } } cout << "Note count:" << endl; for (int i = 0; i < 9; i++) { if (noteFreq[i] != 0) { cout << notes[i] << " : " << noteFreq[i] << endl; } } } int main() { int amount = 1072; cout << "Total amount is: " << amount << endl; countNotes(amount); }
出力
Total amount is: 1072 Note count: 500 : 2 50 : 1 20 : 1 2 : 1
-
C++で最小の合計を持つツリーレベルを見つけるプログラム
二分木があり、そのルートのレベルが1、子のレベルが2などであると仮定します。レベルXのノードのすべての値の合計が最小になるように、最小のレベルXを見つける必要があります。したがって、ツリーが次のような場合- 合計が4– 10 =-6であるため、出力は2になります。これは最小です。 これを解決するには、次の手順に従います- level:=1、sum:=rの値、ansLevel:=level、ansSum:=sum キューqを定義し、指定されたノードrをqに挿入します qが空ではない間 容量:=qのサイズ レベルを1増やし、合計:=0 容量が0では
-
xとその桁の合計がC++で指定されたnと等しくなるような数xを見つけます
ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i