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:
#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