Informatică, întrebare adresată de morcov64, 9 ani în urmă

AJUTOR!!
#1883
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 ≤ 1000
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


dan3s20: mda se pare ca nu pot sa-l lipesc
dan3s20: #include
dan3s20: #include < iostream >
dan3s20: using namespace std;
int n,i,j;
long a[1000];
bool ok;
dan3s20: int main()
{
dan3s20: cin>>n;
dan3s20: for(int i=0;i<n;i++){
cin>>a[i];
}
dan3s20: for(int i=0;i<n;i++){
ok=false;
for(int j=i+1;j<n;j++){
if(!ok){
dan3s20: if(a[j]>a[i])
{
cout<<a[j]<<" ";
ok=true;
}
}

}
if(!ok){
cout<<-1;

}
}

return 0;
}
dan3s20: scuze de spam :)) il compilasem inainte si cand l-am lipit nu se lipea bine

Răspunsuri la întrebare

Răspuns de dan3s20
1
declari sirul A de 1000elemente de tipul long/longint
n,i,j declarat intreg
ok boolean


citesti n
pentru i=0 cat timp i<n ,i++(for de la 1 la n daca esti in pascal)
citeste a[i]

pentru i=0 pana i<n executa i++
{
ok=false
pentru j=i+1 pana la j<n executa j++
{
daca ok=false atunci
{
daca a[j]>a[i]
{
scrie a[j]
ok=true
}
}
}
daca ok=false
scrie -1

}

etc...

vreo preferinta de limbaj anume?
Răspuns de express
12
Ti-am facut eu o sursa in C++. Suuces!
#include <iostream>
using namespace std;
int n, i, j, k, v[1005], sol[1005], maxx;
int main()
{
    cin >> n;
    for(i = 1; i <= n; i ++)
        cin >> v[i];
    for(i = 1; i < n; i ++)
     {
        if(v[i] < v[i + 1]) sol[i] = v[i + 1];
         else
         {
            maxx = v[i];
            for(j = i + 1; j <= n; j ++)
            {
                if (v[j] > maxx)
                {
                    maxx = v[j];
                    break;
                }
            }
            if(maxx == v[i]) sol[i] = -1;
                        else sol[i] = maxx;
         }
     }
     sol[n] = -1;;
     for(i = 1; i <= n; i ++)
      cout << sol[i] << " ";
    return 0;
}


uleiaalex: Am o recomandare, sa creezi o solutie fara a folosi break; este util dar in informatica aceea sa fie ultima solutie.
dan3s20: atata memorie sacrificata..
express: va sfatuiesc sa mai cititi ..."noutati"...lasti mentalitatile profesorilor de moda veche care nu se pot obisnui cu noutatille in informatica.
morcov64: multumesc mult
Alte întrebări interesante