Rezolvare completă PbInfo #323 PartitiiNumar3

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 

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema PartitiiNumar3:

#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 << "
";
}

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;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #323 PartitiiNumar3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #323 PartitiiNumar3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!