3920 - CainiSiPisici1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == 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' (...
 
 
(3 intermediate revisions by the same user not shown)
Line 11: Line 11:
== Restricții și precizări ==
== Restricții și precizări ==
*'''1 ⩽ c , p ⩽ 10
*'''1 ⩽ c , p ⩽ 10
== Exemplu 1 ==
== Exemplul 1 ==
;'''Intrare'''
;'''Intrare'''
:3 3
:3 3
Line 18: Line 18:
:CCPPCP
:CCPPCP
:CPPCCP
:CPPCCP
== Exemplu 2 ==
 
== Exemplul 2 ==
;'''Intrare'''
;'''Intrare'''
:0 0
:0 0
;'''Ieșire'''
;'''Ieșire'''
:Nu au fost respectate cerintele impuse.
:Datele nu corespund restrictiilor impuse.
== Rezolvare ==
 
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>

Latest revision as of 16:46, 8 January 2024

Cerința[edit | edit source]

Î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[edit | edit source]

Programul citește de la tastatură numerele c p.

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 1 ⩽ c , p ⩽ 10

Exemplul 1[edit | edit source]

Intrare
3 3
Ieșire
CCCPPP
CCPPCP
CPPCCP

Exemplul 2[edit | edit source]

Intrare
0 0
Ieșire
Datele nu corespund restrictiilor impuse.

Rezolvare[edit | edit source]

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