PartitiiNumar5

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 pare.

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 pare 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ă.

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

Restricții și precizări

  • 1 ≤ n ≤ 40

Exemplu

Intrare

10

Ieșire

2 2 2 2 2 
2 2 2 4 
2 2 6 
2 4 4 
2 8 
4 6 
10
#include <fstream>
//#include <iostream>
using namespace std;

int st[1000], n;

ifstream cin("partitiinumar.in");
ofstream cout("partitiinumar.out");

void afisare(int k){
    for(int i=1;i<=k;i++)
        cout << st[i] << " ";
        cout << '\n';
}

void back(int k, int s){
    for(int i=st[k-1] ; i<=n-s ; i=i+2)
    {
        st[k]=i;
        if(s+st[k]<=n)
            if( s+st[k] == n )
                afisare(k);
            else
                back(k+1, s+st[k]);
    }
}
int main(){

    cin>>n;
    if(n%2)
      cout<<"imposibil";
    else
    {st[0]=2;
    back(1,0);}
    return 0;
}
%d bloggers like this: