Răspuns :
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
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!