3291 - Memory010

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se citesc numere naturale cuprinse între 1 și 30.000.000 până la întâlnirea numărului 0. Să se afișeze valoarea duplicat.

Date de intrare[edit | edit source]

Programul citește de la tastatură maxim 1.000.000 de numere cuprinse între 1 și 30.000.000.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul d, reprezentând valoarea duplicată.

Restricţii şi precizări[edit | edit source]

  • între numerele citite se află cu siguranță un număr duplicat

Exemplu[edit | edit source]

Intrare
12 3 8 10 5 8 2 0
Iesire
Datele de intrare corespund restrictiilor impuse
8


Exemplu 2[edit | edit source]

Intrare
12 3 8 10 5 8 2 a
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare(nr, bare1): # functia de validare a datelor de intrare

   if len(bare1) != nr or bare1[-1] != 0:
       raise ValueError
   if nr > 1000000:
       raise ValueError
   for bara1 in bare1[:-1]:
       if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000:
           raise ValueError
   print("Datele de intrare corespund restrictiilor impuse")


def find_duplicate(numere1):

   numere_intalnite = set()  # Creăm un set pentru a urmări numerele întâlnite
   for numar in numere1:
       if numar in numere_intalnite:  # Dacă numărul a fost întâlnit deja
           return numar  # Returnăm numărul duplicat
       numere_intalnite.add(numar)  # Altfel, adăugăm numărul în set
   return None  # Dacă nu găsim niciun număr duplicat, returnăm None


if __name__ == '__main__':

   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       numere = list(map(int, input("Introduceți numerele, separate prin spații (terminați cu 0): ").split()))
       n = len(numere)
       validare(n, numere)  # apelul functiei de validare
       duplicat = find_duplicate(numere[:-1])  # apelul functiei de rezolvare
       if duplicat is not None:  # Dacă am găsit un duplicat
           print("Valoarea duplicată este:", duplicat)
       else:
           print("Nu s-a găsit niciun număr duplicat.")  # Altfel, afișăm un mesaj
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse")


</syntaxhighlight>