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

Ma puteti ajuta cu aceasta problema?As dori o rezolvare cat mai optima.In c+++

Anexe:

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n,i,k,j,m;

   cout << "n= "; cin >> n;

   cout << "introdu " << n << " numere " << endl;

   int arr[n]={0};

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

       cin >> arr[i];

   cout << "k= "; cin >> k;

   int aa[k]={0};

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

   {

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

           if (arr[j]<arr[i]) swap(arr[i],arr[j]);

   }

   j=n-k;

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

       aa[i]=arr[j++];

   int suma=0;

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

       suma+=aa[i];

   cout << "introdu nr. de interogari, m= "; cin >> m;

   int q[m];

   cout << "introdu " << m << " interogari, numere intregi: ";

   cout << "Maximul mediilor a K numere: \n ";

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

   {

       cin >> q[i];

       if (q[i]>=aa[k-1])

       {

           suma-=aa[0];

           for (j=0; j<k-1; ++j)

               aa[j]=aa[j+1];

           aa[k-1]=q[i];

           suma+=q[i];

           cout << 1.0*suma/k << "\n";

       }

       else

       {

           if (q[i]>aa[0])

           {

               int poz=1; while (aa[poz]<q[i]) ++poz;

               suma-=aa[0];

               for (j=0; j<poz-1; ++j)

               aa[j]=aa[j+1];

               aa[poz]=q[i];

               suma+=q[i];

               cout << 1.0*suma/k << "\n";

           }

           else cout << 1.0*suma/k << "\n";

       }

   }

}

Explicație:

Eu astfel am văzut rezolvarea... (nu am văzut ceva mai optim)

1. am citit valorile lui arr şi l-am sortat crescător.

2. ultimele k elemente (cele mai mari) le-am plasat într+un vector aparte.

3. Am aflat suma acestor k numere.

4. Citesc interogările.

5. La fiecare interogare actualizez vectorul celor k numere şi la necesitate inserez interogarea la vector.

6. Actualizez suma şi afişez media

Alte întrebări interesante