1128 - Jucarii: Difference between revisions
Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură numerele naturale '''m''' și '''n'''. == Date de ieşire == 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ăr... |
No edit summary |
||
Line 8: | Line 8: | ||
* 1 ⩽ n, m ⩽ 100.000 | * 1 ⩽ n, m ⩽ 100.000 | ||
* grădinița este virtuală | * grădinița este virtuală | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
: 2 4 | : 2 | ||
: 4 | |||
; Ieșire | ; Ieșire | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 12 | : 12 | ||
== Exemplul 2 == | |||
; Intrare | |||
: 2 | |||
: q | |||
; Ieșire | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== 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. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# Definim funcția | # 1128 Jucarii | ||
def | # Definim funcția de verificare a valorilor m și n | ||
# | def verificare(m_val, n_val): | ||
if | # Verificăm dacă m și n respectă restricțiile problemei | ||
return | if 1 <= m_val <= 100000 and 1 <= n_val <= 100000: | ||
# Dacă valorile sunt valide, returnăm True | |||
return True | |||
else: | else: | ||
# Altfel, returnăm n | # Dacă valorile nu sunt valide, ridicăm o excepție | ||
raise ValueError | |||
# 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) | |||
# 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> | </syntaxhighlight> |
Revision as of 16:16, 9 November 2023
Cerinţa
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
Programul citește de la tastatură numerele naturale m și n.
Date de ieşire
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
- 1 ⩽ n, m ⩽ 100.000
- grădinița este virtuală
Exemplul 1
- Intrare
- 2
- 4
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 12
Exemplul 2
- Intrare
- 2
- q
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
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.
Rezolvare
<syntaxhighlight lang="python" line>
- 1128 Jucarii
- 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
- 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)
- 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>