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

Dau 55 de puncte ( sa fie explicati pasii de rezolvare !!!)
Se citesc de la tastatură n<=100, un număr natural și n numere întregi.
Determinați poziția primului element din vector cu proprietatea că este
medie aritmetică între succesorul și predecesorul său. (Pentru a determina
primul element (de indice minim) cu o anumită proprietate, se parcurge
vectorul de la stânga la dreapta până când găsim primul element
cu proprietatea cerută sau până când epuizăm elementele vectorului) / Tot cu comentariu !!!

Răspunsuri la întrebare

Răspuns de DongHuong
1

Răspuns:

#include <bits/stdc++.h> //includem libraria bits/stdc++.h care contine toate celelate librari

using namespace std; // folosim standardul

int v[1001]; // declaram vectorul v de 1001 pozitii

int main() // declaram functia main

{

   int n; // declararea lui n

   int st, dr; // declararea lui st si dr

   int x; // declararea lui x

   int poz; // declararea lui poz

   int mid; // declararea lui mid

   cin >> n; // citirea lui n

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

   {

       cin >> v[i]; // citirea vectorului

   }

   sort(v+1, v+n+1); // sortam vectorul deoarece vom folosii cautarea binara

   for(int i = 1; i <= n; i++) // parcurgerea vectorului inca o data pentru a rezolva cerinta

   {

       if(v[i] == (v[i+1] + v[i-1]) / 2) // verificam daca este medie aritmetica

       {

           x = v[i]; // retinem numarul intr-o variabila pentru cautarea binara;

       }

       st = 1, dr = n, poz = n + 1; // atribuim 1 pentru st deoarece este capatul din stanga al vectorului, n pentru dr pentru ca este capatul din dreapta al vectorului si n + 1 pentru poz

       while(st <= dr) // cat timp stanga mai mic decat dreapta

       {

           mid = (st + dr) / 2; // aflam mijlocul vectorului

           if(v[mid] >= x) // daca elementul din mijloc este mai mare decat numarul cautat

           {

               poz = mid; // ii dam lui poz valoare lui mid

               dr = mid - 1; // restrangem intervalul in care cautam  spre stanga

           }

           else

           {

               st = mid + 1; // restrangem intervalul in care cautam spre dreapta

           }

       }

   }

   cout << poz; // scriem pozitia

   return 0; // terminarea programului

}

Explicație:

nu stiu daca e corecta 100%, nu mi-ai dat date de intrare si de iesire

Alte întrebări interesante