タスクは簡単です。私にいくつかの取得1000
、500
および100
ノートを。
どうやって ?あなたが尋ねるかもしれません。心配しないでください。クレジットカードを受け入れるATMが近くにあるので、銀行を強奪する必要はありません。ただし、クレジット限度額はタスクに十分であるため、引き出しには注意する必要があります。
チャレンジ
数を考えると1000
、500
そして100
ノートが必要な、少なくともそれらの多くのノートを取得するために必要な特定の引き出しを計算します。各引き出しで、ATMは次のルールに基づいて各メモを吐き出すことができます。
- 引き出し金額(
A
)は以下5000
- の場合
A%1000 == 0
、ATMは1500
音、5100
音、休符を吐き出し1000
ます - それ以外の場合
A%500 == 0
、ATMは5つの100
ノート、残りの1000
ノートを吐き出します - それ以外の場合
A%1000 < 500
、ATMはfloor(A/1000)
1000
メモと休符を吐き出し100
ます - それ以外の場合
A%1000 > 500
、ATMはfloor(A/1000)
1000
ノート、1500
および残りの100
ノートを吐き出します
- の場合
- 引き出し金額が等しい
5000
- の場合
A%1000 == 0
、ATMは2つの500
ノートと残りの1000
ノートを吐き出します - それ以外の場合、
A%500 == 0
ATMは1つの500
メモと休符を吐き出し1000
ます - それ以外の場合
A%1000 < 500
、ATMはfloor(A/1000)
1000
メモと休符を吐き出し100
ます - それ以外の場合
A%1000 > 500
、ATMはfloor(A/1000)
1000
ノート、1500
および残りの100
ノートを吐き出します
- の場合
明確にするために、ここにすべての可能な金額まで引き出されたノートの完全な表があります7000
(さらに引き出せますが、パターンはその後変更されません)。順序は<1000> <500> <100>
次のとおりです。
100 => 0 0 1 2500 => 2 0 5 4800 => 4 1 3
200 => 0 0 2 2600 => 2 1 1 4900 => 4 1 4
300 => 0 0 3 2700 => 2 1 2 5000 => 4 2 0
400 => 0 0 4 2800 => 2 1 3 5100 => 5 0 1
500 => 0 0 5 2900 => 2 1 4 5200 => 5 0 2
600 => 0 1 1 3000 => 2 1 5 5300 => 5 0 3
700 => 0 1 2 3100 => 3 0 1 5400 => 5 0 4
800 => 0 1 3 3200 => 3 0 2 5500 => 5 1 0
900 => 0 1 4 3300 => 3 0 3 5600 => 5 1 1
1000 => 0 1 5 3400 => 3 0 4 5700 => 5 1 2
1100 => 1 0 1 3500 => 3 0 5 5800 => 5 1 3
1200 => 1 0 2 3600 => 3 1 1 5900 => 5 1 4
1300 => 1 0 3 3700 => 3 1 2 6000 => 5 2 0
1400 => 1 0 4 3800 => 3 1 3 6100 => 6 0 1
1500 => 1 0 5 3900 => 3 1 4 6200 => 6 0 2
1600 => 1 1 1 4000 => 3 1 5 6300 => 6 0 3
1700 => 1 1 2 4100 => 4 0 1 6400 => 6 0 4
1800 => 1 1 3 4200 => 4 0 2 6500 => 6 1 0
1900 => 1 1 4 4300 => 4 0 3 6600 => 6 1 1
2000 => 1 1 5 4400 => 4 0 4 6700 => 6 1 2
2100 => 2 0 1 4500 => 4 0 5 6800 => 6 1 3
2200 => 2 0 2 4600 => 4 1 1 6900 => 6 1 4
2300 => 2 0 3 4700 => 4 1 2 7000 => 6 2 0
2400 => 2 0 4
マーティンが提供するリスト
キャッチ
クレジットカードの与信限度額は十分であるため、出金全体で出金される合計額が、特定のメモの入力/要求に対して可能な最小額であることを確認する必要があります。
入力
入力値を必要と音符の数に対応する3つの数字のために任意の好都合なフォーマットにすることができ1000
、500
そして100
。必ずしもその順序である必要はありません。
出力
出力は、新しい行で区切られた各トランザクションで引き出される金額です。
例
入力(形式<1000> <500> <100>
):
3 4 1
出力:
600
600
600
3600
後もう少し:
7 2 5
5000
3500
1 2 3
600
1700
21 14 2
600
600
600
1600
5000
5000
5000
5000
5000
仮定
- ATMには、各金額の無数のメモがあると仮定できます。
- また、任意の数のトランザクションを作成できると想定することもできます。
- さらに、一部の入力値に対するソリューションは一意ではない可能性があるため、可能な最小量と最小ノート要件を満たすソリューションのいずれか1つを出力できます。
通常どおり、STDIN / ARGVを介して入力を読み取り、引数を介して入力を受け取る関数に出力を出力し、金額に対応する整数のリストまたは金額を改行で区切った文字列のいずれかを返す完全なプログラムを作成できます。
これはコードゴルフなので、バイト単位の最短コードが優先されます。
21 14 2
は妥当な時間で終了する必要がありますか?