Salut! Cine ma poate ajuta cu o rezolvare la aceasta problema, va rog? Mentionez ca trebuie rezolvata doar cu while si if, altfel se prinde profu :))
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.
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int main(){
int mod=1,n,x,ante,i;
//Citeste nr de valori din sir
cin >> n;
//Citeste primul numar
cin >> ante;
i=1;
//Citeste restul de numere
while(i<n){
//Citeste numarul curent
cin >> x;
//Daca termenul curent e mai mic decat cel anterior iar pana acum sirul a fost crescator schimba sirul la modul descrescator
if(x<ante && mod==1)mod=2;
//Daca sirul e descrescator iar termenul curent e mai mare decat cel anterior atunci sirul nu are proprietatea data
else if(mod==2 && x>ante) mod=3;
//Daca termenul curent e egal cu anteriorul atunci sirul nu are proprietatea data
if(x==ante) mod=3;
//Pregateste pentru iteratia urmatoare
ante=x;
i++;
}
//Verifica daca sirul e descrescator (modul 2)
if(mod==2) cout << "DA";
else cout << "NU";
}