3001 - PSR: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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...
 
 
(One intermediate revision by the same user not shown)
Line 19: Line 19:
: 2 15
: 2 15
; Iesire
; Iesire
: Datele de intrare corespund restrictiilor impuse
: Punctajul obținut de Maricica la sfârșitul celor 2 runde: 1
== Exemplu 2==
; Intrare
: 1
: 1
: 35
; Iesire
: Datele de intrare nu corespund restrictiilor impuse
== 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
 
    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__':


def main():
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    N = int(input("Introduceți numărul de runde (N): "))
    try:
    punctaj = 0
        n = int(input("Introduceți numărul de runde (N): "))
        runde = []


    for _ in range(N):
        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())
            A, R = map(int,
        valoare_asteptata_R = calculeaza_R(A)
                      input("Introduceți numărul generat de calculator și răspunsul dat de Maricica (A R): ").split())
            runde.append((A, R))


         if valoare_asteptata_R == R:
         validare(n, runde)  # apelul functiei de validare
            punctaj += 1
        result = punctaj(runde)  # apelul functiei de rezolvare
        print("Punctajul obținut de Maricica la sfârșitul celor", n, "runde:", result)


     print("Punctajul obținut de Maricica la sfârșitul celor", N, "runde:", punctaj)
     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>