Informatică, întrebare adresată de mierlaaurie, 8 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.

Răspunsuri la întrebare

Răspuns de pmarian98
0

#include <iostream>

using namespace std;

int main()

{

   int a[1001],n,i;

   bool cr,de;

   cin>>n;

   for(i=0;i<n;++i)

       cin>>a[i];

   cr=de=false;

   for(i=0;i<n-1;++i)

       if (a[i]==a[i+1])

       {

           cout<<"NU";   //  daca gasim doua elementele egale, nu poate fi munte

           return 0;

       }

       else

           if (a[i]>a[i+1])

               if (cr)

                   de=true;  // am gasit elemente descrescatoare

               else

               {

                   cout<<"NU";// elemente descrescatoare si nu a fost parte crescatoare

                   return 0;  // nu poate fi munte

               }

           else

               if (a[i]<a[i+1])

                   if (!de)

                       cr=true;   // am gasit elemente crescatoare

                   else

                   {

                       cout<<"NU";// elemente crescatoare dupa parte descrescatoare

                       return 0;  // nu poate fi munte

                   }

   if (cr and de)

       cout<<"DA";  // sirul contine atat parte crescatoare cat si descrescatoare

   else

       cout<<"NU";  // nu are parte descrescatoare

   return 0;

}

Răspuns de boiustef
0

#include <iostream>

using namespace std;

int n, a, b, cr=1, desc=1, k=1;

int main()

{

   cin >> n;

   cin >> a >> b;

   if (a<b) k=2;

   while (a<b && k<n)

   {

     a=b;

     cin >> b;

     if (a<b) ++k;

   }

   if (k==1 || k==n) cr=0;

   else

   {

       ++k;

      while (a>b && k<n)

      {

         a=b; ++k;

         cin >>b;

      }

      if (k<n) desc=0;

   }

   if (cr && desc) cout << "DA";

   else cout << "NU";

}


mierlaaurie: multumesc mult
mierlaaurie: ma mai poti ajuta cu inca o problema?
Alte întrebări interesante