359
Cerinţa
Se citesc două numere naturale nenule n și m. Să se determine toate şirurile cu m elemente din mulţimea {1,2,..,n}, ordonate strict crescător, cu proprietatea că oricare două elemente consecutive în şir au diferenţa mai mică sau egală cu cu 2.
Date de intrare
Fişierul de intrare siruri.in conţine pe prima linie numerele n și m, separate printr-un spațiu.
Date de ieşire
Fişierul de ieşire siruri.out va conţine pe fiecare linie câte m valori, separate prin câte un spaţiu, reprezentând elementele unui şir.
Restricţii şi precizări
1 ≤ m ≤ n ≤ 15- şirurile vor fi afişate în ordine lexicografică
Exemplu
siruri.in
5 3
siruri.out
1 2 3 1 2 4 1 3 4 1 3 5 2 3 4 2 3 5 2 4 5 3 4 5
#include <bits/stdc++.h>
using namespace std;
ifstream cin("siruri.in");
ofstream cout("siruri.out");
int n , m , x[20];
void afisare()
{
int ok = 0;
for(int i = 2 ; i <= m ; i++)
if(x[i] - x[i-1] > 2) ok = 1;
if(ok == 0)
{
for(int i = 1 ; i <= m ; i++)
cout << x[i] << " ";
cout << '\n';
}
}
void back(int k)
{
for(int i = x[k - 1] + 1 ; i <= n ; i++)
{
x[k] = i;
if(k == m) afisare();
else back(k + 1);
}
}
int main()
{
cin >> n >> m;
back(1);
return 0;
}
Comentarii