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

Ma puteti ajuta cu aceasta problema?as prefera o rezolvare cat mai optima.

Anexe:

Răspunsuri la întrebare

Răspuns de Franz
1

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

Anexe:

antoniia28: Nu imi merge..imi afiseaza alte valori
antoniia28: Imi poti trimite codul altundeva?sa-mi trimiti eventual fisieru pe facebook
Alte întrebări interesante