Informatică, întrebare adresată de magdalenapop, 8 ani în urmă

Se numește vârf într-un șir de numere naturale un termen al șirului care este strict mai mare decât
fiecare dintre cei doi termeni vecini cu el, aflați în șir pe poziția din stânga, respectiv din dreapta sa.
Fișierul bac.in conține un șir de cel mult 106
numere naturale din intervalul [0,109], separate prin
câte un spațiu. Se cere să se afișeze pe ecran vârful din șirul aflat în fișier pentru care valoarea
absolută a diferenței dintre cei doi vecini ai săi este minimă. Dacă există mai multe astfel de numere, se
afișează cel mai mare dintre ele, iar dacă nu există niciun vârf, se afișează pe ecran mesajul
nu exista. Proiectați un algoritm eficient din punctul de vedere al timpului de executare și al spațiului
de memorie utilizat.
Exemplu: dacă fișierul conține șirul 2 7 10 5 6 2 1 3 20 17 9 11 7 3 10 6 2
se afișează pe ecran 11

Răspunsuri la întrebare

Răspuns de Mghetes
2

Răspuns:

citirea o fac de la tastatura, poti adauga tu din fisier la nevoie,

#include <iostream>

using namespace std;

int main() {

 int n, v[106], i, d, min, vf;

 

 cout <<"n=";

 cin >> n;

 

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

 {

     cout<<"v["<<i<<"]=";

     cin>>v[i];

 }

 

 d = 0;

 

 //cel mai mare nr citit este 109, cel mai mic 0, deci diferenta cea mai mare poate fi 109-0=109

 // initializam un minim cu un nr mai mare ca 109

 min = 110;

 

 vf = -1;

 

 // de la al doilea nr si pana la penultimul, primul si ultimul excludem

 // deoarece nu au vecini in stanga respectiv dreapta

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

 {

     if(v[i] > v[i-1] && v[i] < v[i+1]) // verificam vecinii

     {

         d = v[i+1] -v[i-1]; //calculam diferenta dintre ei

         

         if(d < min) // daca diferenta este minima, o actualizam

         {

           min = d;

             

           if(v[i] > vf) // daca varful este maxim, il actualizam

             {

                 vf = v[i];

             }

          }

     }

 }

 

 if(vf == -1) // daca valoarea varfului nu s-a modificat, inseamna ca nu am gasit un nr sa indeplineasca conditiile de varf

  cout<<"nu exista";

 else

  cout<<"varful maxim este: "<< vf;

 

 return 0;

}

Alte întrebări interesante