276
Cerința
Se citesc două numere naturale n
și m
. Afișați în ordine lexicografică toate submulțimile cu m
elemente ale mulțimii {1, 2, ..., n}
în care nu există două elemente pare alăturate.
Date de intrare
Programul citește de la tastatură numerele n
și m
.
Date de ieșire
Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu.
Restricții și precizări
1 ≤ m < n ≤ 20
Exemplu
Intrare
5 3
Ieșire
1 2 3 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 3 4 5
Explicație
Numrele 2
și 4
nu apar pe poziții alăturate.
#include <bits/stdc++.h> using namespace std; int n , m , x[30] , p[30]; int afisare() { for(int i = 1 ; i <= m ; i++) cout << x[i] << " "; cout << '\n'; } int valid(int k) { if(x[k] % 2 == 0 && x[k - 1] % 2 == 0) return 0; else return 1; } void back(int k) { for(int i = x[k - 1] + 1 ; i <= n ; i++) { x[k] = i; if(k == 1 || valid(k)) { if(k == m) afisare(); else back(k + 1); } } } int main() { cin >> n >> m; back(1); }
Comentarii