3001 - PSR: Difference between revisions
Line 30: | Line 30: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare(nr, runda): # functia de validare a datelor de intrare | ||
if len(runda) != nr: | |||
raise ValueError | |||
if nr > 10000: | |||
raise ValueError | |||
if | 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("Punctajul obținut de Maricica la sfârșitul celor", | 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> | </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>