3291 - Memory010: Difference between revisions
Pagină nouă: == 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 sigura... |
|||
(3 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 find_duplicate( | 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 | numere_intalnite = set() # Creăm un set pentru a urmări numerele întâlnite | ||
for numar in | for numar in numere1: | ||
if numar in numere_intalnite: # Dacă numărul a fost întâlnit deja | if numar in numere_intalnite: # Dacă numărul a fost întâlnit deja | ||
return numar # Returnăm numărul duplicat | return numar # Returnăm numărul duplicat | ||
Line 22: | Line 46: | ||
return None # Dacă nu găsim niciun număr duplicat, returnăm None | return None # Dacă nu găsim niciun număr duplicat, returnăm None | ||
duplicat = find_duplicate(numere) # | 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(" | print("Datele de intrare nu corespund restrictiilor impuse") | ||
except IndexError: | |||
print(" | print("Datele de intrare nu corespund restrictiilor impuse") | ||
</syntaxhighlight> | </syntaxhighlight> |
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>