# PBinfo #3995 – PartitiiNumar6 – Rezolvare C++

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

## Enunț

Cerința
Se dă un număr natural n. Determinați, în ordine lexicografică, toate modalitățile de a-l scrie pe n ca sumă de numere naturale impare distincte.

Date de intrare
Programul citește de la tastatură numărul natural n.

Date de ieșire
Programul va afișa pe câte linie a ecranului câte un șir de numere naturale impare ordonate strict crescător, separate prin câte un spațiu. Suma numerelor din fiecare șir este n. Șirurile vor fi afișate în ordine lexicografică.

Dacă nu există nicio modalitate de a-l scrie pe n ca sumă de numere naturale impare distincte se va afișa mesajul imposibil.

Restricții și precizări

1 ≤ n ≤ 40

Exemplu:
Intrare

16
Ieșire

1 3 5 7 
1 15 
3 13 
5 11 
7 9

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n , x[41], cnt;
void Afisare(int k)
{
	for(int i =1 ; i <= k ; i ++)
		cout << x[i] << " ";
	cout << endl;
}
void Back(int k , int S)
{
	for(int i = x[k-1] + 2; i <= n ; i += 2)
	{
		x[k] = i;
		if(S + x[k] <= n)
		{
			if(S + x[k] == n)
				Afisare(k), cnt ++;
			else
				Back(k + 1 , S + x[k]);
		}
	}
}
int main()
{
	cin >> n;
	x[0] = -1;
	Back(1 , 0);
	if(cnt == 0)
		cout << "imposibil\n";
	return 0;
}
```

## Resurse

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