Tugasnya sederhana. Dapatkan saya beberapa 1000
, 500
dan 100
catatan.
Bagaimana? Anda mungkin bertanya. Jangan khawatir, tidak perlu merampok bank karena ada ATM di dekatnya yang menerima kartu kredit Anda. Tetapi batas kredit Anda hanya cukup untuk tugas itu sehingga Anda harus berhati-hati dengan penarikan.
Tantangan
Mengingat jumlah 1000
, 500
dan 100
catatan yang diperlukan, hitung penarikan khusus yang diperlukan untuk mendapatkan setidaknya banyak catatan itu. Dalam setiap penarikan, ATM dapat memuntahkan masing-masing catatan berdasarkan aturan berikut:
- Jumlah yang ditarik (
A
) kurang dari5000
- Jika
A%1000 == 0
, maka ATM meludahi 1500
note, 5100
note dan sisanya1000
note - Kalau tidak
A%500 == 0
, ATM meludahi 5100
not, sisanya1000
not - Jika tidak
A%1000 < 500
, ATM akan meludahkanfloor(A/1000)
1000
catatan dan100
catatan lainnya - Jika tidak
A%1000 > 500
, ATM akan mengeluarkanfloor(A/1000)
1000
catatan, 1500
dan100
catatan lainnya
- Jika
- Jumlah yang ditarik lebih besar dari sama dengan
5000
- Jika
A%1000 == 0
, maka ATM meludah 2500
catatan dan1000
catatan sisa - Jika tidak,
A%500 == 0
ATM akan meludahkan 1500
catatan dan1000
catatan lainnya - Jika tidak
A%1000 < 500
, ATM akan meludahkanfloor(A/1000)
1000
catatan dan100
catatan lainnya - Jika tidak
A%1000 > 500
, ATM akan mengeluarkanfloor(A/1000)
1000
catatan, 1500
dan100
catatan lainnya
- Jika
Untuk klarifikasi, berikut adalah tabel lengkap catatan yang ditarik untuk semua jumlah yang mungkin hingga 7000
(Anda dapat menarik lebih banyak, tetapi polanya tidak berubah setelahnya). Urutannya adalah <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
Daftar disediakan oleh Martin
Tangkapan
Karena batas kredit dalam kartu kredit Anda hanya cukup, Anda perlu memastikan bahwa jumlah total yang ditarik di seluruh penarikan adalah seminimal mungkin untuk input / persyaratan catatan yang diberikan.
Memasukkan
Masukan bisa dalam format yang menguntungkan selama tiga angka sesuai dengan jumlah catatan yang diperlukan dari nilai 1000
, 500
dan 100
. Tidak harus dalam urutan itu.
Keluaran
Output adalah jumlah yang akan ditarik dalam setiap transaksi yang dipisahkan oleh baris baru.
Contohnya
Input (format <1000> <500> <100>
):
3 4 1
Keluaran:
600
600
600
3600
beberapa lagi:
7 2 5
5000
3500
1 2 3
600
1700
21 14 2
600
600
600
1600
5000
5000
5000
5000
5000
Asumsi
- Anda dapat berasumsi bahwa ATM memiliki jumlah catatan tanpa batas untuk setiap jumlah.
- Anda juga dapat mengasumsikan bahwa Anda dapat melakukan sejumlah transaksi.
- Selain itu, solusi untuk beberapa nilai input mungkin tidak unik, sehingga Anda dapat mengeluarkan 1 dari solusi yang memenuhi jumlah minimum yang mungkin dan persyaratan catatan minimum yang diperlukan.
Seperti biasa, Anda dapat menulis input pembacaan program lengkap melalui STDIN / ARGV dan mencetak output ke STDOUT atau fungsi mengambil input melalui argumen dan mengembalikan daftar bilangan bulat yang sesuai dengan jumlah atau string dengan jumlah yang dipisahkan oleh baris baru.
Ini adalah kode-golf sehingga kode terpendek dalam byte menang.
21 14 2
selesai dalam waktu yang wajar?