1884 - UEMM1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== Se dă un șir cu '''n''' elemente, numere naturale. Să se afișeze, pentru fiecare element din șir, valoarea din șir aflată după acesta și mai mare decât acesta (Următorul Element Mai Mare). Dacă o asemenea valoare nu există, se va afișa '''-1'''. ==Date de intrare== Programul citește de la tastatură numărul '''n''', iar apoi cele '''n''' elemente ale șirului. ==Date de ieșire== Programul va afișa pe ecran cele '''n''' valori determinate, s...
 
No edit summary
 
Line 16: Line 16:
*elementele șirului vor fi mai mai mici decât '''1.000.000'''
*elementele șirului vor fi mai mai mici decât '''1.000.000'''


==Exemplu:==
==Exemplul 1:==


;Intrare
;Intrare


:5
5
:3 4 3 5 1
3 4 3 5 1


;Ieșire
;Ieșire


:4 5 5 -1 -1
Datele de intrare corespund restrictiilor impuse.
4 5 5 -1 -1
 
==Exemplul 2:==
 
;Intrare
 
UEMM1
 
;Ieșire
 
Datele de intrare nu corespund restrictiilor impuse.


==Rezolvare==
==Rezolvare==
Line 31: Line 42:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


def urmatorul_element_mai_mare(n, sir):
def verificare_restrictii(numere):    # functia de verificare a datelor de intrare
    if 1 <= numere <= 100000:
        return True
    else:
        return False
 
 
def urmatorul_element_mai_mare(numere, string):
     # Inițializăm rezultatul cu -1 pentru toate elementele
     # Inițializăm rezultatul cu -1 pentru toate elementele
     rezultat = [-1] * n
     rezultat = [-1] * numere
     # Inițializăm o stivă goală pentru a păstra indicii elementelor
     # Inițializăm o stivă goală pentru a păstra indicii elementelor
     stiva = []
     stiva = []


     # Parcurgem fiecare element din șir
     # Parcurgem fiecare element din șir
     for i in range(n):
     for i in range(numere):
         # Cât timp stiva nu este goală și elementul curent este mai mare decât elementul din vârful stivei
         # Cât timp stiva nu este goală și elementul curent este mai mare decât elementul din vârful stivei
         while stiva and sir[stiva[-1]] < sir[i]:
         while stiva and string[stiva[-1]] < string[i]:
             # Actualizăm rezultatul pentru indicele din vârful stivei cu valoarea actuală din șir
             # Actualizăm rezultatul pentru indicele din vârful stivei cu valoarea actuală din șir
             rezultat[stiva.pop()] = sir[i]
             rezultat[stiva.pop()] = string[i]
         # Adăugăm indicele elementului curent în stivă
         # Adăugăm indicele elementului curent în stivă
         stiva.append(i)
         stiva.append(i)
Line 49: Line 67:
     return rezultat
     return rezultat


# Citim numărul de elemente
 
n = int(input("Introduceți numărul de elemente: "))
if __name__ == '__main__':
# Citim șirul de numere
    try:
sir = list(map(int, input("Introduceți elementele șirului, separate prin spațiu: ").split()))
        # Citim numărul de elemente
# Apelăm funcția și afișăm rezultatul
        n = int(input("Introduceți numărul de elemente: "))
print(urmatorul_element_mai_mare(n, sir))
        # Citim șirul de numere
        sir = list(map(int, input("Introduceți elementele șirului, separate prin spațiu: ").split()))
 
        if verificare_restrictii(n):            # verificam datele de intrare
            print("Datele de intrare corespund restrictiilor impuse.")
            # Apelăm funcția și afișăm rezultatul
            print(urmatorul_element_mai_mare(n, sir))
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 21:37, 27 November 2023

Cerința[edit]

Se dă un șir cu n elemente, numere naturale. Să se afișeze, pentru fiecare element din șir, valoarea din șir aflată după acesta și mai mare decât acesta (Următorul Element Mai Mare). Dacă o asemenea valoare nu există, se va afișa -1.

Date de intrare[edit]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.

Date de ieșire[edit]

Programul va afișa pe ecran cele n valori determinate, separate prin câte un spațiu.

Restricții și precizări[edit]

  • 1 ≤ n ≤ 100.000
  • elementele șirului vor fi mai mai mici decât 1.000.000

Exemplul 1:[edit]

Intrare
5
3 4 3 5 1
Ieșire
Datele de intrare corespund restrictiilor impuse.
4 5 5 -1 -1

Exemplul 2:[edit]

Intrare
UEMM1
Ieșire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare[edit]

<syntaxhighlight lang="python" line="1" start="1">

def verificare_restrictii(numere): # functia de verificare a datelor de intrare

   if 1 <= numere <= 100000:
       return True
   else:
       return False


def urmatorul_element_mai_mare(numere, string):

   # Inițializăm rezultatul cu -1 pentru toate elementele
   rezultat = [-1] * numere
   # Inițializăm o stivă goală pentru a păstra indicii elementelor
   stiva = []
   # Parcurgem fiecare element din șir
   for i in range(numere):
       # Cât timp stiva nu este goală și elementul curent este mai mare decât elementul din vârful stivei
       while stiva and string[stiva[-1]] < string[i]:
           # Actualizăm rezultatul pentru indicele din vârful stivei cu valoarea actuală din șir
           rezultat[stiva.pop()] = string[i]
       # Adăugăm indicele elementului curent în stivă
       stiva.append(i)
   # Returnăm rezultatul
   return rezultat


if __name__ == '__main__':

   try:
       # Citim numărul de elemente
       n = int(input("Introduceți numărul de elemente: "))
       # Citim șirul de numere
       sir = list(map(int, input("Introduceți elementele șirului, separate prin spațiu: ").split()))
       if verificare_restrictii(n):             # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           # Apelăm funcția și afișăm rezultatul
           print(urmatorul_element_mai_mare(n, sir))
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>