#3920 CainiSiPisici1
Î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
Răspunsuri la întrebare
Răspuns:
#include<iostream>
using namespace std;
int c, p;
char st[30];
void Afis(int k)
{
for (int i = 1; i <= k; i++) cout << st[i];
cout << '\n';
}
int valid(int k) {
int p1 = 0, c1 = 0;
if (st[1] != 'C') return 0;
if (k == c+p && st[k] != 'P') return 0;
for (int i = 1; i <= k; i++) {
if (i > 2 && st[i] == 'C' && st[i - 1] == 'P' && st[i - 2] == 'C') return 0;
if (st[i] == 'P')p1++;
else c1++;
}
if (c1 > c || p1 > p) return 0;
return 1;
}
void back(int k) {
for (int i = 1; i <= 2; i++) {
if (i == 1) st[k] = 'C';
else st[k] = 'P';
if (!valid(k));
else {
if (k == c+p) Afis(k);
else back(k + 1);
}
}
}
int main() {
cin >> c >> p;
back(1);
return 0;
}
Explicație: