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ăspunsuri la întrebare
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.