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

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

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

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

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

Exemplu

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

Intrare
1
35
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

<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>