3001 - PSR: Difference between revisions

From Bitnami MediaWiki
 
Line 30: Line 30:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def calculeaza_R(A):
def validare(nr, runda): # functia de validare a datelor de intrare
    return int(A * (A + 1) * (A + 2) * (A + 3) + 1)**0.5


def main():
    if len(runda) != nr:
    N = int(input("Introduceți numărul de runde (N): "))
        raise ValueError
    punctaj = 0


     for _ in range(N):
     if nr > 10000:
         A, R = map(int, input("Introduceți numărul generat de calculator și răspunsul dat de Maricica (A R): ").split())
         raise ValueError
        valoare_asteptata_R = calculeaza_R(A)


         if valoare_asteptata_R == R:
    for numar1, numar2 in runda:
             punctaj += 1
         if (not isinstance(numar1, int) or numar1 < 1 or numar1 > 100000
                or not isinstance(numar2, int) or numar2 < 1 or numar2 > 10000300001):
             raise ValueError


     print("Punctajul obținut de Maricica la sfârșitul celor", N, "runde:", punctaj)
     print("Datele de intrare corespund restrictiilor impuse")
 
 
def calculeaza_numar2(numar1):
    return int((numar1 * (numar1 + 1) * (numar1 + 2) * (numar1 + 3) + 1)**0.5)
 
 
def punctaj(runde1):
    puncte = 0
 
    for numar1, numar2 in runde1:
        valoare_asteptata_numar2 = calculeaza_numar2(numar1)
 
        if valoare_asteptata_numar2 == numar2:
            puncte += 1
 
    return puncte
 
 
if __name__ == '__main__':
 
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        n = int(input("Introduceți numărul de runde (N): "))
        runde = []
 
        for i in range(n):
            A, R = map(int,
                      input("Introduceți numărul generat de calculator și răspunsul dat de Maricica (A R): ").split())
            runde.append((A, R))
 
        validare(n, runde)  # apelul functiei de validare
        result = punctaj(runde)  # apelul functiei de rezolvare
        print("Punctajul obținut de Maricica la sfârșitul celor", n, "runde:", result)
 
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse")


if __name__ == "__main__":
    main()


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 08:16, 12 November 2023

Cerinţa[edit | edit source]

Maricica este elevă în clasa a VIII-a și se pregătește pentru Examenul de Evaluare Națională. Profesorul de matematică a observat că Maricica nu stăpânește operațiile matematice elementare așa că, i-a oferit softul educațional PSR (produs – suma – radical) care funcționează astfel:

În fiecare rundă, calculatorul generează un număr natural A. Maricica trebuie să calculeze un număr R = partea întreagă a numărului √A∗(A+1)∗(A+2)∗(A+3)+1. Dacă răspunde corect, Maricica primește un punct altfel primește zero puncte pentru runda curentă. Jocul se desfășoară pe parcursul a N runde. Punctajul S obținut de Maricica se va calcula ca fiind suma punctajelor obținute în fiecare rundă. Câte puncte a acumulat Maricica?

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul natural N, reprezentând numărul de runde și apoi N perechi de numere naturale A și R, separate prin spații, reprezentând numărul generat de calculator și răspunsul dat de Maricica în runda curentă.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran, pe prima linie numărul S, reprezentând punctajul obținut de Maricica la sfârșitul celor N runde.

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ N ⩽ 10000
  • 1 ⩽ A ⩽ 100000
  • 1 ⩽ R ⩽ 10000300001

Exemplu[edit | edit source]

Intrare
2
1 5
2 15
Iesire
Datele de intrare corespund restrictiilor impuse
Punctajul obținut de Maricica la sfârșitul celor 2 runde: 1

Exemplu 2[edit | edit source]

Intrare
1
35
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare(nr, runda): # functia de validare a datelor de intrare

   if len(runda) != nr:
       raise ValueError
   if nr > 10000:
       raise ValueError
   for numar1, numar2 in runda:
       if (not isinstance(numar1, int) or numar1 < 1 or numar1 > 100000
               or not isinstance(numar2, int) or numar2 < 1 or numar2 > 10000300001):
           raise ValueError
   print("Datele de intrare corespund restrictiilor impuse")


def calculeaza_numar2(numar1):

   return int((numar1 * (numar1 + 1) * (numar1 + 2) * (numar1 + 3) + 1)**0.5)


def punctaj(runde1):

   puncte = 0
   for numar1, numar2 in runde1:
       valoare_asteptata_numar2 = calculeaza_numar2(numar1)
       if valoare_asteptata_numar2 == numar2:
           puncte += 1
   return puncte


if __name__ == '__main__':

   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       n = int(input("Introduceți numărul de runde (N): "))
       runde = []
       for i in range(n):
           A, R = map(int,
                      input("Introduceți numărul generat de calculator și răspunsul dat de Maricica (A R): ").split())
           runde.append((A, R))
       validare(n, runde)  # apelul functiei de validare
       result = punctaj(runde)  # apelul functiei de rezolvare
       print("Punctajul obținut de Maricica la sfârșitul celor", n, "runde:", result)
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse")


</syntaxhighlight>