fbpx

Problema #204 – Siruri – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa