334
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
#include <bits/stdc++.h>
using namespace std;
ifstream cin("partitiinumar3.in");
ofstream cout("partitiinumar3.out");
int n , x[50] , a , b;
void afisare(int k)
{
for(int i = 1 ; i <= k ; i++)
cout << x[i] << " ";
cout << '\n';
}
void back(int k , int sp)
{
for(int i = a ; i <= b ; i++)
{
x[k] = i;
if(k == 1 || x[k] >= x[k - 1])
{
sp += x[k];
if(sp <= n)
if(sp == n) afisare(k);
else back(k + 1 , sp);
sp -= x[k];
}
}
}
int main()
{
cin >> n >> a >> b;
back(1 , 0);
}
Comentarii