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