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

Cerința
Un şir se numeşte şir munte, dacă are un singur maxim pe poziţia v, numit vârf şi respectă următoarele proprietăţi:

În stânga şi în dreapta vârfului există cel puţin câte un element.
Secvenţa a[1], a[2], ... , a[v] este strict crescătoare.
Secvenţa a[v], a[v+1], ... , a[n] este strict descrescătoare.
Se citeşe un şir cu n elemente. Să se verifice dacă este şir munte.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire
Programul va afișa pe ecran unul dintre mesajele DA sau NU în funcţie că este şir munte sau nu.

Restricții și precizări
3 ≤ n ≤ 1000
0 ≤ elementele şirului ≤ 1 000 000 000
Exemplu 1:
Intrare

5
1 2 3 4 5
Ieșire

NU
Exemplu 2:
Intrare

5
1 2 3 4 3
Ieșire

DA
Explicație
Primul exemplu nu este şir munte, pe când al doilea exemplu este şir munte.

problema #1321 de pe pbinfo

Răspunsuri la întrebare

Răspuns de uleiaalex
4
Am facut problema in C++.

#include <iostream>

using namespace std;

int main()
{
 int n = 0;
 //citeste n
 cout<<"Lungime sir: ";
 cin>>n;
 
 //declar vectorul
 int v[n];

 //citesc elementele vectorului
 for (int j = 0; j < n; j++)
 {
    cout<<"v["<<j<<"]=";
    cin>>v[j];
    cout<<endl;
 }
    
 //determin portiunea crescatoare
 int i = 0;
 while (i < n - 1 && v[i] < v[i + 1])
    i++;
 //variabila verificare conditie
 bool ok = true;
 //verific daca sirul este numai crescator atunci i-ul avand 
 //valoarea indicelui ultimului element al vectorului
 if (i >= n-1)
    ok = false;

 //verific daca conditia de munte este si dupa ce se termina sirul crescator.
 for (int j = i; j < n-1 && ok; j++)
 {
    if (v[j] < v[j + 1])
       ok = false;
 }

 //Afisez mesajele corespunzatoare.
 if (ok)
    cout<<"DA";
 else
    cout<<"NU";
}
Alte întrebări interesante