Ma puteti ajuta cu aceasta problema?As dori o rezolvare cat mai optima.In c+++
Răspunsuri la întrebare
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