3291 - Memory010

De la Universitas 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
Datele de intrare corespund restrictiilor impuse
8


Exemplu 2

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


Rezolvare

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")