0596 - Numere2: Difference between revisions

From Bitnami MediaWiki
Miriam (talk | contribs)
Am adăugat întreaga problemă
 
Miriam (talk | contribs)
m cuprins
Line 2: Line 2:
Sursa: [https://www.pbinfo.ro/probleme/596/numere2 Numere2]
Sursa: [https://www.pbinfo.ro/probleme/596/numere2 Numere2]
----
----
== Cuprins ==
* [[0415 - unique#Cerin%C5%A3a|1Cerinţă]]
* [[0415 - unique#Date%20de%20intrare|2Date de intrare]]
* [[0415 - unique#Date%20de%20ie%C8%99ire|3Date de ieșire]]
* [[0415 - unique#Restric%C5%A3ii%20%C5%9Fi%20preciz%C4%83ri|4Restricţii şi precizări]]
* [[0415 - unique#Exemple|5Exemple]]
** [[0415 - unique#Exemplul%201|5.1Exemplul 1]]
** [[0415 - unique#Exemplul%202|5.2Exemplul 2]]
** [[0415 - unique#Exemplul%203|5.3Exemplul 3]]
* [[0415 - unique#Rezolvare|6Rezolvare]]


==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>