3408 - joc2020: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3408/joc2020 - joc2020] ---- == Cerinţa == Gigel a descoperit un nou joc. Jocul are '''n''' nivele și la fiecare nivel îți dă câte un număr natural '''x'''. Pentru a trece nivelul trebuie să calculezi câți divizori are numărul '''x'''. Scrieți un program care să permită terminarea jocului prin trecerea celor '''n''' nivele în ordinea în care sunt date. == Date de intrare == Fișierul de intrare '''joc2020.in''' conține p... |
No edit summary |
||
Line 38: | Line 38: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#3408 | |||
def joc2020(vector, n): | |||
f = open("joc2020.out", "w") | |||
for numar in vector: | |||
divizori = 0 | |||
for div in range(1, numar+1): | |||
if numar % div == 0: | |||
divizori += 1 | |||
f.write(str(divizori)+ " ") | |||
def conform_restrictiilor(): | |||
vector = list() | |||
with open('joc2020.in') as f: | |||
n = int(f.readline()) | |||
vector = list(map(int, f.readline().split())) | |||
if n > 500000 or n < 1: | |||
print("Datele nu sunt comform restricțiilor impuse.") | |||
exit() | |||
for x in vector: | |||
if x < 0 or x > 1000000: | |||
print("Datele nu sunt comform restricțiilor impuse.") | |||
exit() | |||
print("Datele sunt corecte.") | |||
return vector, n | |||
if __name__ == '__main__': | |||
vector, n = conform_restrictiilor() | |||
joc2020(vector, n) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicaţie cod== | ==Explicaţie cod== | ||
Acest program primește un fișier de intrare '''joc2020.in''' care conține un număr natural '''n''' și o listă de '''n''' numere naturale. Scopul programului este de a calcula numărul de divizori pentru fiecare număr din lista de intrare și a scrie numărul de divizori într-un fișier de ieșire '''joc2020.out'''. | |||
Funcția '''joc2020''' primește ca parametrii vectorul de numere și numărul de elemente din vector. Ea deschide fișierul de ieșire, apoi parcurge fiecare număr din vector. Pentru fiecare număr, calculează numărul de divizori prin parcurgerea tuturor numerelor de la 1 la numărul respectiv și verificarea dacă acesta este divizor. Numărul de divizori este stocat într-o variabilă numită '''divizori'''. Funcția apoi scrie numărul de divizori în fișierul de ieșire și adaugă un spațiu la sfârșit pentru a separa numerele. | |||
Funcția '''conform_restrictiilor''' citește datele de intrare din fișierul '''joc2020.in''' și verifică dacă acestea sunt conforme cu restricțiile impuse. Dacă '''n''' depășește 500.000 sau este mai mic decât 1 sau dacă cel puțin unul dintre numerele din vector este mai mic decât 0 sau mai mare decât 1.000.000, programul afișează ''"Datele nu sunt comform restricțiilor impuse."'' și se încheie. | |||
Funcția '''main''' apelează funcția '''conform_restrictiilor''' pentru a verifica datele de intrare și pentru a obține vectorul și numărul de elemente. Apoi apelează funcția '''joc2020''' pentru a scrie numărul de divizori în fișierul de ieșire. |
Latest revision as of 18:08, 2 April 2023
Sursa: - joc2020
Cerinţa[edit | edit source]
Gigel a descoperit un nou joc. Jocul are n nivele și la fiecare nivel îți dă câte un număr natural x. Pentru a trece nivelul trebuie să calculezi câți divizori are numărul x. Scrieți un program care să permită terminarea jocului prin trecerea celor n nivele în ordinea în care sunt date.
Date de intrare[edit | edit source]
Fișierul de intrare joc2020.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.naturale separate prin spații.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieșire joc2020.out va conține pe prima linie n numere, fiecare reprezentând numărul de divizori ai numărului corespunzător din fişierul de intrare. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 500.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- joc2020.in
- 7
- 30 5 44 210 1 35 30030
- Ieșire
- Datele sunt corecte.
- joc2020.out
- 8 2 6 16 1 4 64
Exemplul 2[edit | edit source]
- joc2020.in
- 3
- 27 11 8
- Ieșire
- Datele sunt corecte.
- joc2020.out
- 4 2 4
Exemplul 3[edit | edit source]
- joc2020.in
- 2
- 191824719471 19991
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3408
def joc2020(vector, n):
f = open("joc2020.out", "w") for numar in vector: divizori = 0 for div in range(1, numar+1): if numar % div == 0: divizori += 1 f.write(str(divizori)+ " ")
def conform_restrictiilor():
vector = list() with open('joc2020.in') as f: n = int(f.readline()) vector = list(map(int, f.readline().split())) if n > 500000 or n < 1: print("Datele nu sunt comform restricțiilor impuse.") exit() for x in vector: if x < 0 or x > 1000000: print("Datele nu sunt comform restricțiilor impuse.") exit() print("Datele sunt corecte.") return vector, n
if __name__ == '__main__':
vector, n = conform_restrictiilor() joc2020(vector, n)
</syntaxhighlight>
Explicaţie cod[edit | edit source]
Acest program primește un fișier de intrare joc2020.in care conține un număr natural n și o listă de n numere naturale. Scopul programului este de a calcula numărul de divizori pentru fiecare număr din lista de intrare și a scrie numărul de divizori într-un fișier de ieșire joc2020.out.
Funcția joc2020 primește ca parametrii vectorul de numere și numărul de elemente din vector. Ea deschide fișierul de ieșire, apoi parcurge fiecare număr din vector. Pentru fiecare număr, calculează numărul de divizori prin parcurgerea tuturor numerelor de la 1 la numărul respectiv și verificarea dacă acesta este divizor. Numărul de divizori este stocat într-o variabilă numită divizori. Funcția apoi scrie numărul de divizori în fișierul de ieșire și adaugă un spațiu la sfârșit pentru a separa numerele.
Funcția conform_restrictiilor citește datele de intrare din fișierul joc2020.in și verifică dacă acestea sunt conforme cu restricțiile impuse. Dacă n depășește 500.000 sau este mai mic decât 1 sau dacă cel puțin unul dintre numerele din vector este mai mic decât 0 sau mai mare decât 1.000.000, programul afișează "Datele nu sunt comform restricțiilor impuse." și se încheie.
Funcția main apelează funcția conform_restrictiilor pentru a verifica datele de intrare și pentru a obține vectorul și numărul de elemente. Apoi apelează funcția joc2020 pentru a scrie numărul de divizori în fișierul de ieșire.