硬貨釣銭の問題は非常によく文書化されています。宗派のコインの無限の供給を考える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。したがって、答えは再びになります{}。