Cerința
Un şir se numeşte şir vale, dacă are un singur minim pe poziţia v şi respectă următoarele proprietăţi:
În stânga şi în dreapta minimului există cel puţin câte un element.
Secvenţa a[1], a[2], ... , a[v] este strict descrescătoare.
Secvenţa a[v], a[v+1], ... , a[n] este strict crescătoare.
Se citeşte un şir cu n elemente. Să se verifice dacă este şir vale.
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 vale 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
4 3 2 1 2
Ieșire
DA
Explicație
Primul exemplu NU este şir vale, pe când al doilea exemplu este şir vale.
problema #1326 de pe pbinfo
Răspunsuri la întrebare
Răspuns de
1
Sper ca te-am ajutat. Nu am testat mai multe exemple doar ce mi-ai lasat tu.#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; } //variabila verificare conditiebool ok = true;
//verific daca e inceput crescatorint i = 0;while (i < n - 1 && v[i] < v[i + 1] && ok) ok = false;
//determin portiunea descrescatori = 0;while (i < n - 1 && v[i] > v[i + 1] && ok) i++;
//verific daca sirul este numai crescator atunci i-ul avand //valoarea indicelui ultimului element al vectoruluiif (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";}
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; } //variabila verificare conditiebool ok = true;
//verific daca e inceput crescatorint i = 0;while (i < n - 1 && v[i] < v[i + 1] && ok) ok = false;
//determin portiunea descrescatori = 0;while (i < n - 1 && v[i] > v[i + 1] && ok) i++;
//verific daca sirul este numai crescator atunci i-ul avand //valoarea indicelui ultimului element al vectoruluiif (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
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Biologie,
9 ani în urmă