fbpx

Problema #3152 – combinari2 – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa