3291 - Memory010

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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