3291 - Memory010: Difference between revisions
(2 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
: 12 3 8 10 5 8 2 0 | : 12 3 8 10 5 8 2 0 | ||
; Iesire | ; Iesire | ||
: Datele de intrare corespund restrictiilor impuse | |||
: 8 | : 8 | ||
<br> | |||
== Exemplu 2 == | |||
; Intrare | |||
: 12 3 8 10 5 8 2 a | |||
; Iesire | |||
: Datele de intrare nu corespund restrictiilor impuse | |||
<br> | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
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 22: | 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 46: | 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>