0596 - Numere2: Difference between revisions
Am adăugat întreaga problemă |
m cuprins |
||
Line 2: | Line 2: | ||
Sursa: [https://www.pbinfo.ro/probleme/596/numere2 Numere2] | Sursa: [https://www.pbinfo.ro/probleme/596/numere2 Numere2] | ||
---- | ---- | ||
==Cerinţă== | ==Cerinţă== |
Revision as of 06:50, 19 March 2023
Sursa: Numere2
Cerinţă
Gigel a găsit un șir cu n
numere naturale. În fiecare zi Gigel parcurge șirul și când găsește o pereche de elemente consecutive egale o elimină din șir și se oprește. Determinați în câte zile va elimina Gigel elemente din șir și care sunt valorile din șir după eliminări.
Date de intrare
Programul citește de la tastatură cel mult 25.000 de numere naturale.
Date de ieșire
Se va afișa numărul Z
de zile în care Gigel face eliminări și elementele șirului după eliminări, separate prin exact un spațiu. În cazul în care datele nu au fost introduse corect, se va afișa mesajul "Datele introduse nu corespund restricțiilor precizate!”.
Restricţii şi precizări
- numerele citite vor fi mai mici decât 100
- în șir sunt cel puțin un număr și cel mult 20.000 de numere naturale
Exemple
Exemplul 1
- Intrare
- 1 2 3 3 2 2 3 3
- Ieșire
- Gigel a terminat de eliminat elementele dupa 4 zile. Valorile din sirul initial dupa eliminari sunt: [1, 2]
Exemplul 2
- Intrare
- 3 4 3 421 243 2
- Ieșire
- Ati introdus un element invalid, introduceti doar numere naturale mai mici decat 100.
Exemplul 3
- Intrare
- 1 1 2 3 44 44 4 44
- Ieșire
- Gigel a terminat de eliminat elementele dupa 3 zile. Valorile din sirul initial dupa eliminari sunt: [2, 3, 4, 44]
Rezolvare
<syntaxhighlight lang="python" line="1"> def eliminare_duplicate():
noua_lista = [int(i) for i in lista] # copiem lista pentru a pastra valorile initiale eliminari = 0 while True: i = 0 eliminat = False while i < len(noua_lista) - 1: if noua_lista[i] > 99 or not isinstance(noua_lista[i], int): print("Ati introdus un element invalid.") exit() if len(lista) > 25000 or len(lista) < 1: print("Ati introdus o lista de lungime invalida.") exit() if noua_lista[i] == noua_lista[i + 1]: del noua_lista[i:i + 2] eliminari += 1 eliminat = True else: i += 1 if not eliminat: break print(f"Gigel a terminat de eliminat elementele dupa {eliminari + 1} zile.") print("Valorile din sirul initial dupa eliminari sunt:", noua_lista)
if __name__ == "__main__":
lista = input("Introduceti sirul de numere separate prin spatiu: ").split() eliminare_duplicate()
</syntaxhighlight>