Informatică, întrebare adresată de miioana86, 8 ani în urmă

#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 de stefanosmysssy
2

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:

Alte întrebări interesante