Buna!
Ma puteti ajuta la problema asta cu o rezolvare si niste explicatii?

#1884 UEMM1
Clasa a 10-a Structuri de date liniare Stiva UEMM1
Etichete: nicio etichetă


Enunț
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, separate prin câte un spațiu.

Restricții și precizări
1 ≤ n ≤ 100.000
elementele șirului vor fi mai mai mici decât 1.000.000

Exemplu
Intrare

5
3 4 3 5 1
Ieșire

4 5 5 -1 -1

Răspuns :

Răspuns:

#include<iostream>

using namespace std;

int main()

{

int n;

bool ok = false;

cout << "Introduceti marimea vectorului : ";

cin >> n; // citim marimea vectorului

int * v = new int[n]; //initializam vectorul cu marimea citita

for (int i = 0; i < n; i++) // pentru fiecare pozitie din vector

{

 cout << "Introduceti numarul " << i<<" : ";

 cin >> v[i]; // citim de la tastatura numarul de pe pozitia I

}

for (int i = 0; i < n; i++) // pentru fiecare pozitie din vector

{

 for (int j = i + 1; j < n; j++) // pentru urmatoarele poziti din vector, plecand de la vecinul lui I (i+1)

 {

  if (v[j] > v[i]) // daca unul din urmatoarele numere este mai mare ca numarul curent

  {

   cout << v[j] << " "; // afisam numarul

   ok = true; // setam ca e OK si nu trebuie sa afisam -1

   break; // iesim din for loop pentru ca am gasit ce cautam

  }

 }

 if (!ok) // daca ok nu este true (Nu am gasit un numar mai mare)

 {

  cout << "-1 "; // afisam -1

 }

 ok = false; // setam ok ca false dupa fiecare loop

}

}

Explicație:

Am adaugat si comentarii pe cod ca sa vezi mai bine exact cum se face.