Saat melakukan angkat besi, saya ingin membuat berat tertentu dengan menempelkan beberapa piring ke bar.
Saya memiliki piring berikut:
- 6 piring masing-masing 1 kg
- 6 piring masing-masing 2,5 kg
- 6 piring masing-masing 5 kg
- 6 piring masing-masing 10 kg
Bar itu sendiri berbobot 10 kg.
Ini hanya diperbolehkan untuk menempelkan pelat secara berpasangan - mereka dipasang di setiap ujung bar, dan pengaturan di kedua ujungnya harus benar-benar simetris (mis. Melampirkan dua piring 5 kg di satu ujung, dan satu piring 10 kg di ujung lainnya dilarang karena alasan keamanan).
Buatlah program atau fungsi yang memberi tahu saya berapa banyak piring dari masing-masing jenis yang harus saya gunakan untuk mendapatkan berat total yang diberikan. Input bilangan bulat lebih besar dari 11; outputnya adalah daftar / array / string 4 angka. Jika tidak mungkin untuk menggabungkan pelat yang ada untuk mendapatkan bobot target, output array nol / kosong, string yang tidak valid, melempar pengecualian atau semacamnya.
Jika ada beberapa solusi, kode harus hanya menghasilkan satu (jangan membuat pengguna memilih - dia terlalu sibuk dengan hal-hal lain).
Kasus uji:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Jika kode Anda menampilkan angka-angka dalam urutan yang berlawanan (dari plat berat ke yang ringan), harap tentukan ini secara eksplisit untuk menghindari kebingungan.