Halter yaparken, bir bara birkaç plaka takarak belirli bir ağırlık yapmak istiyorum.
Aşağıdaki plakalarım var:
- Her biri 1 kg olan 6 tabak
- Her biri 2,5 kg olan 6 tabak
- Her biri 5 kg'lık 6 tabak
- Her biri 10 kg'lık 6 tabak
Çubuğun kendisi 10 kg ağırlığındadır.
Plakaların sadece çiftler halinde takılmasına izin verilir - çubuğun her iki ucuna takılırlar ve iki uçtaki düzenleme tamamen simetrik olmalıdır (örn. Bir ucunda iki adet 5 kg'lık plaka ve bir adet 10 kg'lık plaka diğer ucu güvenlik nedeniyle yasaktır).
Belirli bir toplam ağırlığı elde etmek için her türden kaç tabak kullanmam gerektiğini söyleyen bir program veya işlev yapın. Giriş 11'den büyük bir tamsayıdır; çıktı 4 sayıdan oluşan bir liste / dizi / dizgidir. Hedef ağırlığı elde etmek için mevcut plakaları birleştirmek mümkün değilse, sıfır / boş bir dizi, geçersiz bir dize, bir istisna veya benzeri bir çıktı alın.
Birkaç çözüm varsa, kod yalnızca bir çıktı vermelidir (kullanıcıyı seçmeyin - başka şeylerle çok meşgul).
Test senaryoları:
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
Kodunuz sayıları ters sırada (ağır plakadan hafif olana) çıkarırsa, karışıklığı önlemek için lütfen bunu açıkça belirtin.