3291 - Memory010

From Bitnami MediaWiki

Cerinţa

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

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

Date de ieșire

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

Restricţii şi precizări

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

Exemplu

Intrare
12 3 8 10 5 8 2 0
Iesire
8

Rezolvare

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

   if len(bare1) != nr:
       raise ValueError
   if nr > 1000000:
       raise ValueError
   for bara1 in bare1:
       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)  # 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>