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