# PBinfo #3920 – CainiSiPisici1 – Rezolvare C++

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

## Enunț

Cerința
Într-o curte sunt c câini și p pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:


încep cu câine și se termină cu pisică;
nu conțin nicio pisică între doi câini.

Date de intrare
Programul citește de la tastatură numerele c p.

Date de ieșire
Programul va afișa pe rânduri separate ale ecranului șiruri formate din c caractere 'C' (câine) și p caractere 'P' (pisică), conform enunțului. 

Restricții și precizări

1 ≤ c , p ≤ 10

Exemplu:
Intrare

 3 3
Ieșire

CCCPPP
CCPPCP
CPPCCP

## Cod sursă C++

```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char A[3]="CP";
int c , p , x[21] , n;
void Afisare(int L)
{
    for(int i = 1 ; i <= L ; i ++)
        cout << A[x[i]];
    cout << '\n';
}
bool OK(int k)
{
	if(k == 1)
		if(x[k] != 0)
			return false;
	if(k == n)
		if(x[k] != 1)
			return false;
	if(c < 0 || p < 0)
		return false;
	if(k > 2)
		if(x[k] == 0 && x[k-1] == 1 && x[k-2] == 0)
			return false;
    return true;
}
void Back(int k)
{
	for(int i = 0 ; i <= 1 ; i ++)
	{
		x[k] = i;
		if(i == 0)
			c --;
		else
			p --;
		if(OK(k))
		{
			if(k == n)
				Afisare(n);
			else
				Back(k + 1);
		}
		if(i == 0)
			c ++;
		else
			p ++;
	}
}
int main()
{
    cin >> c >> p;
    n = c + p;
    Back(1);
    return 0;
}
```

## Resurse

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