Am nevoie de mare ajutor,urgent,mie imi iese doar de 90 de pnct!!
Problema 2802 pbinfo.
Cerința
Se citește de la tastatură numărul n și un număr p cu valoarea 1 sau 2 și apoi n șiruri de tip nume prenume media1 media2 media3 separate prin spații.
Pentru p=1, se va afișa numărul elevilor care au media generală mai mare sau egală decât media clasei.
Pentru p=2, se va afișa pe primul rând media clasei și pe următoarele n rânduri, numele, prenumele și media generală a fiecărui elev, separate printr-un singur spațiu, sortat descrescător după medie; la medii egale se sortează crescător după nume, iar la nume egale crescător după prenume.
Date de intrare
Programul citește de la tastatură numerele n p, iar apoi de pe câte o linie cele n structuri de forma specificată în enunț.
Date de ieșire
Dacă p=1 programul va afișa pe ecran numărul elevilor care au media generală mai mare decât media clasei.
Dacă p=2 programul va afișa pe primul rând media clasei și pe următoarele n rânduri, numele, prenumele și media generală ale elevilor, separate printr-un singur spațiu, sortate conform cerinței.
Restricții și precizări
1 ≤ n ≤ 100
numele și prenumele au cel mult 100 de caractere
toate mediile clasei se vor afișa cu două zecimale, rezultatul afișat este considerat valid dacă diferența în valoare absolută dintre acesta și cel corect este cel mult 0.01.
media generală a unui elev este media aritmetică celor trei medii date.
media clasei este media aritmetică a mediilor generale ale elevilor.
Exemplul 1:
Intrare
5 1
Juro Muro 2 3 5
San Hill 7 5 9
Barbarigo San 9 2 4
Ezio Marbo 2 6 3
Gorbo Borbo 2 4 6
Ieșire
2
Răspunsuri la întrebare
Răspuns:
Explicație:
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
struct elevi
{
double NotaFinala;
string Nume,Prenume;
};
bool compar(elevi rhs, elevi lhs)
{
if(rhs.NotaFinala == lhs.NotaFinala)
return rhs.Nume > lhs.Nume;
return rhs.NotaFinala < lhs.NotaFinala;
}
elevi v[101];
int n, cer;
double Mg , N1,N2,N3;
double MgFinal;
int main()
{
cin >> n >> cer;
for(int i = 1; i <= n; i++)
{
cin >> v[i].Nume;
cin.get();
cin >> v[i].Prenume;
cin.get();
cin >> N1 >> N2 >> N3;
Mg = (N1 + N2 + N3) / 3;
v[i].NotaFinala = Mg;
MgFinal += Mg;
}
int contor = 0;
for(int i = 1; i <= n; i++)
{
if((v[i].NotaFinala) >=(MgFinal / n))
contor += 1;
}
if(cer == 1)
cout << contor;
else
{
cout << fixed << setprecision(2) << MgFinal / n << endl;
sort(v + 1, v + 1 + n, compar);
for(int i = n ; i >= 1; i--)
cout << v[i].Nume <<" "<<v[i].Prenume <<" "<<v[i].NotaFinala << endl;
}
}
Si eu am patit sa iau 90 de puncte, a fost un joc de declaratii cu double , floant si long double ca sa iau 100 de puncte, ne pune site-ul la incercare :))