3920 - CainiSiPisici1

From Bitnami MediaWiki
Revision as of 16:46, 8 January 2024 by Ramona Dragoș (talk | contribs) (→‎Exemplu 2)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>

  1. 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>