# PBinfo #3918 – back_cp – Rezolvare C++

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

## Enunț

Cerința
Se citesc două numere naturale n și m. Afișați în ordine lexicografică toate cuvintele care sunt formate din n litere C și m litere P cu proprietatea că nu există nicio literă P cuprinsă între două litere C.

Date de intrare
Programul citește de la tastatură numerele n și m, separate prin spații.

Date de ieșire
Programul va afișa pe ecran pe linii separate cuvintele cerute.

Restricții și precizări

0 ≤ n ≤ 13, 0 ≤ m ≤ 13

Exemplu:
Intrare

3 2
Ieșire

CCCPP
CCPPC
CPPCC
PCCCP
PPCCC

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n,m,X[45];
void afisare()
{
    for(int i=1;i<=n+m;i++)
        if(X[i]==0) cout<<'C';
        else cout<<'P';
    cout<<"\n";
}
int ok(int k)
{
    int s=0;
    for(int i=1;i<=k;i++)
        s=s+X[i];
    if(s>m || k-s>n) return 0;
    if(k>2 && X[k-2]==0 && X[k-1]==1 && X[k]==0)
        return 0;
    return 1;
}
void back(int k)
{
    for(int i=0;i<=1;i++)
    {
        X[k]=i;
        if(ok(k))
            if(k==m+n) afisare();
            else back(k+1);
    }
}
int main()
{
    cin>>n>>m;
    back(1);
    return 0;
}
```

## Resurse

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