3291 - Memory010: Difference between revisions
(One intermediate revision by the same user not shown) | |||
Line 14: | Line 14: | ||
: 8 | : 8 | ||
<br> | <br> | ||
== Exemplu == | == Exemplu 2 == | ||
; Intrare | ; Intrare | ||
: 12 3 8 10 5 8 2 a | : 12 3 8 10 5 8 2 a | ||
Line 25: | Line 25: | ||
def validare(nr, bare1): # functia de validare a datelor de intrare | def validare(nr, bare1): # functia de validare a datelor de intrare | ||
if len(bare1) != nr: | if len(bare1) != nr or bare1[-1] != 0: | ||
raise ValueError | raise ValueError | ||
Line 31: | Line 31: | ||
raise ValueError | raise ValueError | ||
for bara1 in bare1: | for bara1 in bare1[:-1]: | ||
if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000: | if not isinstance(bara1, int) or bara1 < 0 or bara1 > 1000: | ||
raise ValueError | raise ValueError | ||
Line 55: | Line 55: | ||
validare(n, numere) # apelul functiei de validare | validare(n, numere) # apelul functiei de validare | ||
duplicat = find_duplicate(numere) # apelul functiei de rezolvare | duplicat = find_duplicate(numere[:-1]) # apelul functiei de rezolvare | ||
if duplicat is not None: # Dacă am găsit un duplicat | if duplicat is not None: # Dacă am găsit un duplicat |
Latest revision as of 08:44, 12 November 2023
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>