# PBinfo #323 – PartitiiNumar3 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerinţa
Se dă un număr natural n şi un interval [a,b]. Determinaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe n ca sumă de numere naturale din intervalul [a,b].

Date de intrare
Fişierul de intrare partitiinumar3.in conţine pe prima linie numerele n, a şi b.

Date de ieşire
Fişierul de ieşire partitiinumar3.out va conţine pe pe fiecare linie câte  un şir de numere naturale din intervalul [a,b], ordonate crescător, separate prin câte un spaţiu. Suma numerelor din fiecare şir este n. Şirurile vor fi afişate în ordine lexicografică.

Restricţii şi precizări

1 ≤ a < b < n ≤ 40

Exemplu:
partitiinumar3.in

10 2 4
partitiinumar3.out

2 2 2 2 2 
2 2 2 4 
2 2 3 3 
2 4 4 
3 3 4

## Cod sursă C++

```cpp
#include <fstream>
#include <iostream>
using namespace std;
int x[1000], n, a, b;
ifstream fin("partitiinumar3.in");
ofstream fout("partitiinumar3.out");
int minim(int x, int y){
	return x<y ? x : y;
}
void afisare(int k){
	for(int i=1;i<=k;++i)
		fout << x[i] << " ";
	fout << "\n";
}
void back(int k, int s){
	for(int i=x[k-1] ; i<= minim(n-s,b) ; ++i)
	{
		x[k]=i;
		if(s+x[k]<=n)
			if( s+x[k] == n )
				afisare(k);
			else
				back(k+1, s+x[k]);
	}
}
int main(){
	fin >> n >> a >> b;
	x[0] = a;
	back(1,0);
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/323)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/323/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-323/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
