3921 - CainiSiPisici2
Cerința[edit | edit source]
Într-o curte se află câini și pisici. Să se genereze în ordine lexicografică șirurile formate din n animale, care :
- încep cu câine și se termină cu pisică;
- conțin cel mult m pisici;
- nu conțin nicio pisică între doi câini.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n m.
Date de ieșire[edit | edit source]
Programul va afișa pe rânduri separate ale ecranului șiruri formate din n caractere: 'C' (câine) sau 'P' (pisică), conform enunțului.
Restricții și precizări[edit | edit source]
- 1 ⩽ m ⩽ n *les; 20
Exemplul 1[edit | edit source]
- Intrare
- 6 3
- Ieșire
- CCCCCP
- CCCCPP
- CCCPPP
- CCPPCP
- CPPCCP
Exemplul 2[edit | edit source]
- Intrare
- 0 0
- Ieșire
- Nu au fost respectate cerintele impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3921 - CainiSiPisici2
A = ['C', 'P']
def afisare(L):
for i in range(1, L + 1): print(A[x[i]], end=) print()
def ok(k):
if k == 1 and x[k] != 0: return False if k == n and x[k] != 1: return False if m < 0: return False if k > 2 and x[k] == 0 and x[k - 1] == 1 and x[k - 2] == 0: return False return True
def check_constraints(n, m):
if not (1 <= m <= n <= 20): print("Nu au fost respectate cerintele impuse") return False return True
def back(k):
global m for i in range(2): x[k] = i if i == 1: m -= 1 if ok(k): if k == n: afisare(n) else: back(k + 1) if i == 1: m += 1
if __name__ == "__main__":
n, m = map(int, input().split())
if not check_constraints(n, m): exit()
x = [0] * 21 back(1)
</syntaxhighlight>