# PBinfo #1327 – SirPIE – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerinţa
Se citeşte un număr natural nenul n, apoi n numere naturale distincte. Să se afişeze, în ordine lexicografică, șirurile din cele n valori cu proprietatea că oricare două valori învecinate sunt prime între ele.

Date de intrare
Fişierul de intrare sirpie.in conţine pe prima linie numărul n, iar pe a doua linie n numere naturale.

Date de ieşire
Fişierul de ieşire sirpie.out va conţine pe fiecare linie elementele unei șir, separate prin câte un spaţiu.

Restricţii şi precizări

1 ≤ n < 10
cele n numere de pe a doua linie a fişierului de intrare sunt mai mici decât 10000

Exemplu:
sirpie.in

4
8 6 7 9
sirpie.out

6 7 8 9 
6 7 9 8 
8 9 7 6 
9 8 7 6

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("sirpie.in");
ofstream fout("sirpie.out");
int n, x[20],v[20];
int cmmdc(int a, int b)
{
    while(b != 0)
    {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}
void Afisare()
{
    for (int i = 1 ; i <= n ; i ++)
        fout << v[x[i]] << " ";
    fout << endl;
}
bool OK(int k)
{
    for(int i = 1; i < k ; i ++)
        if(x[i] == x[k])
            return false;
    if(k > 1)
        if(cmmdc(v[x[k]], v[x[k-1]]) != 1)
            return false;
    return true;
}
void back(int k)
{
    for(int i =1 ; i <= n ; i ++)
    {
        x[k] = i;
        if(OK(k))
            if(k == n)
                Afisare();
            else
                back(k+1);
    }
}
int main()
{
    fin >> n;
    for (int i = 1 ; i <= n ; i ++)
        fin >> v[i];
    for(int i = 1 ; i < n ; i ++)
        for(int j = i + 1 ; j <= n ; j ++)
            if(v[i] > v[j])
            {
                int aux = v[i];
                v[i] = v[j];
                v[j] = aux;
            }
    back(1);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1327)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1327/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1327/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
