1903 - V Terminal: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== Enunț == | |||
Andrei a făcut într-o zi un șir de N numere. În a doua zi a lăsat în acel șir doar numerele prime. În a treia zi a calculat pentru fiecare număr rămas în șir suma cifrelor, iar apoi a adunat toate aceste sume în S. După ce a obținut numărul S a început să adune toate cifrele din care este format S și tot așa până când ajunge la o cifră terminală C. | |||
== Cerința == | == Cerința == | ||
Ajutați-l pe Andrei să calculeze cifra terminală C. | |||
== Date de intrare == | == Date de intrare == | ||
Line 13: | Line 15: | ||
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000 | * numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000 | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
; vterminalin.txt | ; vterminalin.txt | ||
Line 19: | Line 21: | ||
: 4 11 24 13 97 | : 4 11 24 13 97 | ||
; Ieșire | ; Ieșire | ||
: Datele de intrare corespund restricțiilor impuse | |||
; vterminalout.txt | ; vterminalout.txt | ||
: 4 | : 4 | ||
<br> | |||
=== Explicație === | |||
Doar 11, 13 și 97 sunt prime, deci 11 + 13 + 97 = 121 <br> | |||
1 + 2 + 1 = 4, deci 4 este cifra terminală | |||
== Exemplu 2 == | == Exemplu 2 == | ||
; Intrare | ; Intrare | ||
Line 28: | Line 35: | ||
: 4 11 24 13 97 | : 4 11 24 13 97 | ||
; Ieșire | ; Ieșire | ||
: | : Datele de intrare NU corespund restricțiilor impuse | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#1903 - V Terminal | #1903 - V Terminal | ||
def este_prim(numar): | def este_prim(numar): | ||
if numar < 2: | if numar < 2: | ||
Line 53: | Line 61: | ||
def main(): | def main(): | ||
with open("vterminalin.txt", "r") as fisier: | |||
n = int(fisier.readline().strip()) | |||
numere = list(map(int, fisier.readline().split())) | |||
if 1 <= n <= 100: | |||
print("Datele de intrare corespund restricțiilor impuse") | |||
else: | |||
print("Datele de intrare NU corespund restricțiilor impuse") | |||
for numar in numere: | |||
if not (numar < 1000): | |||
print("Datele de intrare NU corespund restricțiilor impuse") | |||
exit(0) | |||
numere_prime = [num for num in numere if este_prim(num)] | |||
suma_cifrelor_prime = sum(suma_cifrelor(num) for num in numere_prime) | |||
rezultat = cifra_terminala(suma_cifrelor_prime) | |||
with open("vterminalout.txt", "w") as fisier_out: | |||
fisier_out.write(str(rezultat)) | |||
Latest revision as of 09:20, 11 December 2023
Enunț[edit | edit source]
Andrei a făcut într-o zi un șir de N numere. În a doua zi a lăsat în acel șir doar numerele prime. În a treia zi a calculat pentru fiecare număr rămas în șir suma cifrelor, iar apoi a adunat toate aceste sume în S. După ce a obținut numărul S a început să adune toate cifrele din care este format S și tot așa până când ajunge la o cifră terminală C.
Cerința[edit | edit source]
Ajutați-l pe Andrei să calculeze cifra terminală C.
Date de intrare[edit | edit source]
Fișierul de intrare vterminalin.txt conține pe prima linie numărul N, iar pe a doua linie N numere naturale separate prin spații.
Date de ieșire[edit | edit source]
Fișierul de ieșire vterminalout.txt va conține pe prima linie numărul C, reprezentând valoarea cerută.
Restricții și precizări[edit | edit source]
- 1 ⩽ N ⩽ 10.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000
Exemplul 1[edit | edit source]
- Intrare
- vterminalin.txt
- 5
- 4 11 24 13 97
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- vterminalout.txt
- 4
Explicație[edit | edit source]
Doar 11, 13 și 97 sunt prime, deci 11 + 13 + 97 = 121
1 + 2 + 1 = 4, deci 4 este cifra terminală
Exemplu 2[edit | edit source]
- Intrare
- vterminalin.txt
- 105
- 4 11 24 13 97
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1903 - V Terminal
def este_prim(numar):
if numar < 2: return False for i in range(2, int(numar ** 0.5) + 1): if numar % i == 0: return False return True
def suma_cifrelor(numar):
return sum(int(cifra) for cifra in str(numar))
def cifra_terminala(numar):
while numar >= 10: numar = suma_cifrelor(numar) return numar
def main():
with open("vterminalin.txt", "r") as fisier: n = int(fisier.readline().strip()) numere = list(map(int, fisier.readline().split()))
if 1 <= n <= 100: print("Datele de intrare corespund restricțiilor impuse") else: print("Datele de intrare NU corespund restricțiilor impuse")
for numar in numere: if not (numar < 1000): print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
numere_prime = [num for num in numere if este_prim(num)] suma_cifrelor_prime = sum(suma_cifrelor(num) for num in numere_prime) rezultat = cifra_terminala(suma_cifrelor_prime)
with open("vterminalout.txt", "w") as fisier_out: fisier_out.write(str(rezultat))
if __name__ == "__main__":
main()
</syntaxhighlight>