3920 - CainiSiPisici1
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
Exemplul 1
- Intrare
- 3 3
- Ieșire
- CCCPPP
- CCPPCP
- CPPCCP
Exemplul 2
- Intrare
- 0 0
- Ieșire
- Datele nu corespund restrictiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 3920 - CainiSiPisici1
def Afisare(L, x):
for i in range(1, L + 1): print(A[x[i]], end=) print()
def RestrictionCheck(c, p):
if not (1 <= c <= 10) or not (1 <= p <= 10): print("Datele nu corespund restrictiilor impuse") return False return True
def OK(k, x, c, p):
if k == 1 and x[k] != 0: return False if k == n and x[k] != 1: return False if c < 0 or p < 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 Back(k, x, c, p):
for i in range(2): x[k] = i if i == 0: c -= 1 else: p -= 1 if OK(k, x, c, p): if k == n: Afisare(n, x) else: Back(k + 1, x, c, p) if i == 0: c += 1 else: p += 1
if __name__ == "__main__":
A = ['C', 'P'] c, p = map(int, input().split())
if RestrictionCheck(c, p): n = c + p x = [0] * 21 Back(1, x, c, p)
</syntaxhighlight>