Sikke değişim problemi çok iyi belgelenmiştir. Mezheplerin sikke sonsuz kaynağı göz önüne alındığında x_1
için x_m
size kalmış eklemek kombinasyonların sayısını bulmak için gerekmez y
. Örneğin, verilen x = {1,2,3}
ve y = 4
dört kombinasyonları vardır:
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
Giriş
Bozuk para değiştirme sorununun birkaç varyasyonu vardır. Bu varyasyonda iki ek kısıtlamamız var:
- Her mezhep en az bir kez kullanılmalıdır.
- Toplamda sabit sayıda bozuk para kullanılmalıdır.
Örneğin, verilen x = {1,2,3}
, y = 36
ve n = 15
nerede n
kullanılması gerekir sikke toplam sayısıdır, dört kombinasyonları alıyorum:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1 olanlar, 7 ikişer, 7 üçlü){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2 tane, 5 ikişer, 8 üçlü){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3 kişi, 3 ikişer, 9 üçlü){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4 adet, 1 ikişer, 10 üçlü)
Meydan okuma
Zorluk, enumerate
seçtiğiniz dilde yukarıda verilen tüm kombinasyonları numaralandıran bir işlev yazmaktır :
- Mezheplerin listesi. Örneğin
{1,5,10,25}
. Listeleri veya dizileri kullanabilirsiniz. y
Her kombinasyonun toplamını ifade eden negatif olmayan bir tam sayı .n
Toplam jeton sayısını gösteren negatif olmayan bir tam sayı .
Argümanların sırası önemli değil. Noktasız işlevlere izin verilir.
enumerate
İşlevin çıktısı bir kombinasyon listesi olmalıdır. Her kombinasyon benzersiz olmalı ve n
toplanan tam sayıların bir listesi olmalıdır y
. Her mezhep, her kombinasyonda en az bir kez görünmeli ve hiçbir kombinasyon eksik olmamalıdır. Tamsayıların ve kombinasyonların sıralaması önemli değildir. Çıktı için listeler veya diziler kullanabilirsiniz.
Aşağıdaki uç durumları unutmayın:
- Her ikisi de
y
ven
sıfırsa ve mezheplerin listesi boşsa, çıktı bir kombinasyon, yani boş kombinasyon (yani{{}}
) listesidir . - Aksi takdirde,
y
sıfır isen
, sıfırsa veya mezheplerin listesi boşsa, çıktı sıfır kombinasyonlarının bir listesidir (yani{}
). - Daha genel olarak,
y
mezheplerin toplamındann
daha az veya mezhep sayısından daha azsa, çıktı sıfır kombinasyonlarının bir listesidir.
Puanlama, tüm programın bayt cinsinden büyüklüğüne dayalı olacaktır. Bunun enumerate
işlevi, yardımcı işlevleri, içe aktarma ifadelerini, vb. İçerdiğini unutmayın. Test senaryolarını içermez.
y
mezheplerin toplamından daha az ise özyinelemeli çözümünüzün bir noktasında mezhepler listesinin boş olduğu temel duruma ulaşırsınız. Bu nedenle, cevap olacaktır {}
(yani çözüm bulunamadı). Eğer n
daha az mezhepler sayısından daha olduğunu o zaman sonunda nerede baz davayı ulaşırsınız n = 0
ama y != 0
. Dolayısıyla, cevap yine olacak {}
.