1128 - Jucarii: Difference between revisions

From Bitnami MediaWiki
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
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:
* 1 ⩽ n, m ⩽ 100.000
* 1 ⩽ n, m ⩽ 100.000
* grădinița este virtuală
* grădinița este virtuală
== Exemplu ==
== Exemplul 1 ==
; Intrare
; Intrare
: 2 4
: 2  
: 4
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 12
: 12
<br>
== Exemplul 2 ==
; Intrare
: 2
: q
; Ieșire
: 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.
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# Definim funcția pentru calculul factorialului
# 1128  Jucarii
def factorial(n):
# Definim funcția de verificare a valorilor m și n
     # Dacă numărul este 0, returnăm 1
def verificare(m_val, n_val):
     if n == 0:
     # Verificăm dacă m și n respectă restricțiile problemei
         return 1
     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 înmulțit cu factorialul lui n-1
         # Dacă valorile nu sunt valide, ridicăm o excepție
         return n * factorial(n-1)
        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.")


# Definim funcția pentru permutări
        # Calculăm și afișăm numărul de permutări
def permutari(n, m):
        print(permutari(n, m))
    # Returnăm n! / (n-m)!
    return factorial(n) // factorial(n-m)


# Verificăm dacă acest fișier este rulat direct
    # Tratăm cazul în care datele introduse nu sunt valide
if __name__ == "__main__":
    except ValueError:
    m = int(input())
        # Afișăm un mesaj de eroare
    n = int(input())
        print("Datele introduse nu corespund restricțiilor impuse.")
    print(permutari(n, m))


</syntaxhighlight>
</syntaxhighlight>

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>