Ma puteti ajuta cu aceasta problema?as prefera o rezolvare cat mai optima.
Răspunsuri la întrebare
Răspuns:
Explicație:
#include <climits>
#include <iostream>
#include <stdlib.h>
#include <bits/stdc++.h>
#define MACS LONG_MIN
using namespace std;
int Maxime(int K, int N, vector<int> v)
{
// K reprezinta cate maxime vor fi luate in considerare
int i ;
int max2=MACS;
int vv[K];
int kk=K;
int position=1;
int j = 0 ;
//caut K maxime:
for(j = 0 ; j < kk ; j++)
{
i = 0;
max2 = MACS;
//gaseste maximul din vector
, se mai poate lucra la algoritm aici deoarece nu este cel mai optim algoritm de maxime.. sugerez bubblesort + findmax in aceeasi bucla sau o functiei deja implementata in C++ precum max(a, b, Functie_de_comparare) din libraria <algorithm>... in rest totul a fost lucrat cu grija si foarte optim, deoarece biblioteca din C++ care ofera lucrul cu vectori / pointeri / Structuri de Date este foarte bine realizata si ofera functii optime in general..
for(i = 0 ; i < v.size() ; i++)
{
if(max2 < v.at(i)){
max2 = v.at(i);
position = i ;
}
}
//dupa ce gasesc max sterg elem,
v.erase(v.begin()+position);
//repet de cate ori cere K
vv[j] = max2 ;
}
float s=0;
for(j = 0 ; j < K; j++)
{
s = s + vv[j];
//fac suma elem din vector
}
cout<<s/K<<endl;
}
int main()
{
int i , N , s=0 ;
N=5; // HARDKODED N schimbati dumneavoastra puteti da ca input
int K = 4; // HARDCODAT K
int LENQ=3; // LUNGIMEA DE ELEMENTE ALE LUI Q
int q[LENQ];
int arr[N + LENQ];
vector<int> VCT;
cout<<"insert q elems"<<endl;
for(i = 0 ; i < LENQ ; i ++)
{
cin>>q[i];
}
cout<<"insert arr:"<<endl;
for(i = 0 ; i < N ; i ++)
{
cin>>arr[i];
}
//s-au citit q , respectiv arr
//formez un vector in VCT:
//prima parte, cea cu arr:
for(i = 0 ; i < N ; i++)
{
VCT.push_back(arr[i]);
}
//verificam ca s-au bagat ok in vector : (just testing)
/* for(i= 0 ; i< N ; i++)
{
cout<<VCT.at(i);
}
cout<<endl;
*/
//incepem concatenarea cu Q :
int j = 0 ;
while(VCT.size() < N + LENQ)
{
VCT.push_back(q[j]);
j=j+1;
//s-a concatenat primul element, acum verificam maximele:
Maxime(K, N, VCT);
//repeta pentru celelalte elemente dupa ce s-au bagat in vectorul principal (vect principal contine intai ARR , apoi contine Q , asadar: vct(0) = arr(0) si vct(N) = q(0) si arr(N) = vct(N-1)
}
}
Am atasat si testele pentru a putea dovedi functionalitatea programului... Din pacate nu am avut in vedere si criteriul de 'optim' pentru algoritmul de maxim, dar cum am mai precizat, utilizand biblioteca <bits/stdc++.h> si <algorithm> obtinem un program optimal deoarece nu sunt memory leaks prea mari.. putem testa si cu valgrind memcheck faptul ca nu exista leakuri