Rastava broja
Opis zadatka:
Potrebno je napraviti program koji će ispisati sve moguće načine na koje se prirodan broj
N
(1 <= N <= 20) može rastaviti kao suma od
K
(1 <= K <= N) sabiraka koji su također prirodni brojevi. Na
primjer, moguće rastave prirodnog broja
N = 5 na K = 3
sabirka glase
3+1+1, 2+2+1, 2+1+2, 1+3+1,
1+2+2 i 1+1+3.
Ulazna datoteka:
Ulazna datoteka RASTAVA.IN koja se nalazi u tekućem direktoriju
sastoji se od dva reda, u kojima se respektivno nalaze brojevi N i
K.
Izlazna datoteka:
Program treba da kreira izlaznu datoteku UTOVAR.OUT u tekućem direktoriju.
Datoteka treba da sadrži sve moguće rastave broja N na
K sabiraka, pri čemu se svaka rastava nalazi u posebnom redu. Jedna
rastava se sastoji od niza sabiraka koji su međusobno povezani znakom "+". Između sabiraka
i znaka "+" ne nalaze se nikakvi razmaci. Rastave trebaju biti ispisane u takvom poretku da
rastava sa većim prvim sabirkom bude ispisana prije rastave sa manjim prvim sabirkom (na primjer,
rastava 5+2+3 treba da se ispiše prije rastave 4+4+2).
Ukoliko su prvi sabirci jednaki, isti kriterij sortiranja se primjenjuje na slijedeći sabirak,
i tako sve do prvog različitog sabirka (na primjer, rastava 4+2+6+3 treba
da se ispiše prije rastave 4+2+5+4).
Vremensko ograničenje:
Za svaki testni primjer program treba da ponudi rješenje za najviše 20 sekundi.
Primjeri:
RASTAVA.IN
5
3
RASTAVA.OUT
3+1+1
2+2+1
2+1+2
1+3+1
1+2+2
1+1+3
RASTAVA.IN
6
2
RASTAVA.OUT
5+1
4+2
3+3
2+4
1+5
RASTAVA.IN
4
4
RASTAVA.OUT
1+1+1+1
[Testni podaci]
[Rješenje (Pascal)]
[Rješenje (C++)]