1903 - V Terminal: Difference between revisions

From Bitnami MediaWiki
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 ==
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.
;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


== Exemplu 1 ==
== 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
: Eroare: Numărul N trebuie să fie între 1 și 100
: Datele de intrare NU corespund restricțiilor impuse
<br>
 
== 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():
     try:
     with open("vterminalin.txt", "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()))
 
        if not (1 <= n <= 100):
            raise ValueError("Numărul N trebuie să fie între 1 și 100")


        for numar in numere:
    if 1 <= n <= 100:
            if not (numar < 1000):
        print("Datele de intrare corespund restricțiilor impuse")
                raise ValueError("Numerele trebuie să fie mai mici decât 1000")
    else:
        print("Datele de intrare NU corespund restricțiilor impuse")


        numere_prime = [num for num in numere if este_prim(num)]
    for numar in numere:
        suma_cifrelor_prime = sum(suma_cifrelor(num) for num in numere_prime)
        if not (numar < 1000):
        rezultat = cifra_terminala(suma_cifrelor_prime)
            print("Datele de intrare NU corespund restricțiilor impuse")
            exit(0)


        with open("vterminalout.txt", "w") as fisier_out:
    numere_prime = [num for num in numere if este_prim(num)]
            fisier_out.write(str(rezultat))
    suma_cifrelor_prime = sum(suma_cifrelor(num) for num in numere_prime)
    rezultat = cifra_terminala(suma_cifrelor_prime)


     except Exception as e:
     with open("vterminalout.txt", "w") as fisier_out:
         print(f"Eroare: {str(e)}")
         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>

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

   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>