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++)]    

Nazad na izbor zadataka
Nazad na glavnu stranicu