硬貨釣銭の問題は非常によく文書化されています。宗派のコインの無限の供給を考えるx_1
とx_m
、あなたまで追加の組み合わせの数を見つける必要がありますy
。例えば、与えられたx = {1,2,3}
とy = 4
我々は4つの組み合わせがあります。
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
前書き
コイン交換の問題にはいくつかのバリエーションがあります。このバリエーションでは、2つの追加の制限があります。
- すべての額面を少なくとも1回使用する必要があります。
- 正確に固定された数のコインを合計で使用する必要があります。
例えば、与えられたx = {1,2,3}
、y = 36
そしてn = 15
どこn
に使用しなければならないコインの総数であり、我々は4つの組み合わせを取得します:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1個、7個の2個、7個の3個){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2個、5個の2個、8個の3個){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3個、3個の2個、9個の3個){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4個、1個の2個、10個の3個)
チャレンジ
課題は、enumerate
上記のすべての組み合わせを列挙する、選択した言語で関数を作成することです。
- 宗派のリスト。たとえば
{1,5,10,25}
。リストまたは配列のいずれかを使用できます。 y
すべての組み合わせの合計を示す負でない整数。n
コインの総数を示す負でない整数。
引数の順序は関係ありません。ポイントフリー機能が許可されています。
enumerate
関数の出力は、組み合わせのリストでなければなりません。各組み合わせは一意である必要があり、合計がのn
整数のリストである必要がありますy
。すべての額面は、各組み合わせで少なくとも1回出現する必要があり、組み合わせが欠落してはなりません。整数と組み合わせの順序は関係ありません。出力にはリストまたは配列を使用できます。
次のエッジケースに注意してください。
- 両方の場合
y
とがn
ゼロであり、金種のリストが空で、出力が1つの組み合わせのリストである、空の組み合わせ(すなわち、{{}}
)。 - そうでなければ、
y
がゼロ、ゼロ、n
または金種のリストが空の場合、出力はゼロの組み合わせのリスト(つまり{}
)になります。 - より一般的に
y
は、金種の合計よりも小さい場合、または金種n
の数よりも少ない場合、出力はゼロの組み合わせのリストになります。
スコアリングは、バイト単位のプログラム全体のサイズに基づきます。これには、enumerate
関数、ヘルパー関数、インポートステートメントなどが含まれることに注意してください。テストケースは含まれません。
y
が宗派の合計よりも小さい場合、再帰解のある時点で、宗派のリストが空の基本ケースに到達します。したがって、答えは{}
(つまり、解決策が見つからない)になります。場合はn
以下の宗派の数よりも、あなたは最終的にどこのベースケースに達するだろうn = 0
けどy != 0
。したがって、答えは再びになります{}
。