1903 - V Terminal: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == 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. ;Ajutați-l pe Andrei să calculeze cifra terminală C. == Date de intrare == Fișierul...
 
No edit summary
Line 4: Line 4:


== Date de intrare ==
== Date de intrare ==
Fișierul de intrare vterminal.in conține pe prima linie numărul N, iar pe a doua linie N numere naturale separate prin spații.
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 ==
== Date de ieșire ==
Fișierul de ieșire vterminal.out va conține pe prima linie numărul C, reprezentând valoarea cerută.
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 ==
== Restricții și precizări ==
Line 15: Line 15:
== Exemplu 1 ==
== Exemplu 1 ==
; Intrare
; Intrare
; vterminal.in
; vterminalin.txt
: 5
: 5
: 4 11 24 13 97
: 4 11 24 13 97
; Ieșire
; Ieșire
; vterminal.out
; vterminalout.txt
: 4
: 4
<br>
<br>
== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
; vterminal.in
; vterminalin.txt
: 105
: 105
: 4 11 24 13 97
: 4 11 24 13 97
Line 54: Line 54:
def main():
def main():
     try:
     try:
         with open("vterminal.in", "r") as fisier:
         with open("vterminalin.txt", "r") as fisier:
             n = int(fisier.readline().strip())
             n = int(fisier.readline().strip())
             numere = list(map(int, fisier.readline().split()))
             numere = list(map(int, fisier.readline().split()))
Line 69: Line 69:
         rezultat = cifra_terminala(suma_cifrelor_prime)
         rezultat = cifra_terminala(suma_cifrelor_prime)


         with open("vterminal.out", "w") as fisier_out:
         with open("vterminalout.txt", "w") as fisier_out:
             fisier_out.write(str(rezultat))
             fisier_out.write(str(rezultat))



Revision as of 17:13, 1 December 2023

Cerința

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.

Ajutați-l pe Andrei să calculeze cifra terminală C.

Date de intrare

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

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

  • 1 ⩽ N ⩽ 10.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000

Exemplu 1

Intrare
vterminalin.txt
5
4 11 24 13 97
Ieșire
vterminalout.txt
4


Exemplu 2

Intrare
vterminalin.txt
105
4 11 24 13 97
Ieșire
Eroare: Numărul N trebuie să fie între 1 și 100


Rezolvare

<syntaxhighlight lang="python" line>

  1. 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():

   try:
       with open("vterminalin.txt", "r") as fisier:
           n = int(fisier.readline().strip())
           numere = list(map(int, fisier.readline().split()))
       if not (1 <= n <= 100):
           raise ValueError("Numărul N trebuie să fie între 1 și 100")
       for numar in numere:
           if not (numar < 1000):
               raise ValueError("Numerele trebuie să fie mai mici decât 1000")
       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))
   except Exception as e:
       print(f"Eroare: {str(e)}")


if __name__ == "__main__":

   main()

</syntaxhighlight>