ポケットに15ドルあります。同様に、私は変化をもたらさない店にいます。ブラウジング中に、価格が10ドル(税込)のアイテムを見つけました。お金を失うことなく、そのアイテムを購入できますか?
この場合、答えはイエスです。$ 15がどのように分割されても(1つ10と1つ5、3つ5つ、または他の何か)に関係なく、私は常に正確な10ドルを必要とします。
2番目の例として、ポケットに0.16ドルあります。正確に支払うことができる他の金額は何ですか?
Possible Divisions:
0.01, 0.05, 0.10
0.01, 0.05 x 3
0.01 x 16
Guaranteed Exact Change:
0.01, 0.05, 0.06, 0.10, 0.11, 0.15, 0.16
ポケットに$ 0.27ある場合はどうなりますか?
Possible Divisions:
0.01 x 2, 0.25
0.01 x 2, 0.05, 0.10 x 2
0.01 x 2, 0.05 x 3, 0.10
0.01 x 2, 0.05 x 5
0.01 x 27
Guaranteed Exact Change:
0.01, 0.02, 0.25, 0.26, 0.27
上記のケースでは、私が常に完全な変更を行うことができる金額はわずかでした。
あなたのタスク
A)整数の金額とB)入力として可能な金額のリストを受け取り、完全な変更が必要な金額のリストを出力する最短のプログラム(または名前付き関数)を記述します。入力は、STDINまたはプログラムまたは関数の引数のいずれかです。私は、入力の書式設定を非常に厳しくするつもりはありません。それはあなたの言語が配列をフォーマットする方法と一致します。
おそらくより詳細な説明
私はポケットに一定の金額を持っています。これは通貨の可能なデモのセットから形成されます。私が8ドルを持っていて、可能な額面が2ドルと3ドルであることを知っているなら、私のポケットに入れることができる法案の非常に多くの異なる組み合わせがあります。これらは2+2+2+2と3+3+2です。正確な金額を作成できるようにするには、ポケットにある請求書だけを使用してその数量を作成できる必要があります。4つの2があれば、を生成でき2, 4, 6, or 8ます。2つの3と2があった場合2, 3, 5, 6, or 8、これらの組み合わせのどれが実際にポケットに入っているかわからないため、最終的な答えはになり2, 6, 8ます。これらは私が値です知っている合計金額と可能な宗派与えられた、私は私のポケットから作り出すことができます。
手動計算のサンプルI / O
7 [3, 4]
3, 4, 7 //only one possible division into 3 + 4
7 [3, 2]
2, 3, 4, 5, 7 //the only division is 3 + 2 + 2
6 [2, 3, 4]
6 //divisions are 2+2+2, 3+3, 2+4
16 [1, 5, 10, 25] //this represents one of the examples above
1, 5, 6, 10, 11, 15, 16
27 [1, 5, 10, 25] //another example from above
1, 2, 25, 26, 27
1500 [1, 5, 10, 25, 100, 500, 1000, 2000]
500, 1000, 1500
600 [100, 500, 1000, 2000]
100, 500, 600
600 [200, 1, 5, 10, 25, 100, 500, 1000, 2000]
600
6 [2, 3, 4]。することはできません2+2+23をしない、と3+32と4を作ってみませんか?