1128 - Jucarii: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 15: Line 15:
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 12
: 12
<br>
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
Line 21: Line 22:
; Ieșire
; Ieșire
: Datele introduse nu corespund restricțiilor impuse.
: Datele introduse nu corespund restricțiilor impuse.
<br>
== Explicație ==
== Explicație ==
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.
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.

Latest revision as of 19:08, 10 November 2023

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>