1128 - Jucarii

From Bitnami MediaWiki

Cerinţa[edit | edit source]

La o grădiniță, cei m copii de la grupa mică s-au trezit în fața a n jucării diferite. Cel mai isteț dintre ei vă întreabă în câte moduri ar putea să-și aleagă fiecare câte o jucărie ?

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele naturale m și n.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran numărul q, reprezentând numărul de moduri în care pot să-și aleagă fiecare câte o jucărie. Pentru că acest număr poate fi foarte mare, se va afișa modulo 224737.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n, m ⩽ 100.000
  • grădinița este virtuală

Exemplul 1[edit | edit source]

Intrare
2
4
Ieșire
Datele introduse corespund restricțiilor impuse.
12


Exemplul 2[edit | edit source]

Intrare
2
q
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Explicație[edit | edit source]

Avem 2 copii și 4 jucării ( notate a, b, c, d ). Cei doi copii pot lua jucăriile (a,b), (a,c), (a,d), (b,c), (b,d), (c,d), (b,a), (c,a), (d,a), (c,b), (d,b), (d,c), în total 12 variante de alegere.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1128 Jucarii
  2. Definim funcția de verificare a valorilor m și n

def verificare(m_val, n_val):

   # Verificăm dacă m și n respectă restricțiile problemei
   if 1 <= m_val <= 100000 and 1 <= n_val <= 100000:
       # Dacă valorile sunt valide, returnăm True
       return True
   else:
       # Dacă valorile nu sunt valide, ridicăm o excepție
       raise ValueError


  1. Definim funcția pentru calculul permutărilor

def permutari(n_val, m_val):

   # Definim funcția internă pentru calculul factorialului
   def factorial(num):
       # Dacă n este 0, returnăm 1 (cazul de bază al factorialului)
       if num == 0:
           return 1
       else:
           # Altfel, calculăm factorialul recursiv
           return num * factorial(num-1)
   # Calculăm și returnăm permutările folosind formula n! / (n-m)!
   return factorial(n_val) // factorial(n_val-m_val)


  1. Verificăm dacă acest script este rulat direct (nu este importat ca modul)

if __name__ == '__main__':

   try:
       # Citim numărul de copii
       m = int(input("Introduceti numarul de copii: "))
       # Citim numărul de jucării
       n = int(input("Introduceti numarul de jucarii: "))
       # Verificăm dacă datele introduse sunt valide
       if verificare(m, n):
           # Dacă datele sunt valide, afișăm un mesaj de confirmare
           print("Datele introduse corespund restricțiilor impuse.")
       # Calculăm și afișăm numărul de permutări
       print(permutari(n, m))
   # Tratăm cazul în care datele introduse nu sunt valide
   except ValueError:
       # Afișăm un mesaj de eroare
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>