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
100de 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
Exemplul 2:
Intrare
5 2 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
4.60 San Hill 7.00 Barbarigo San 5.00 Gorbo Borbo 4.00 Ezio Marbo 3.67 Juro Muro 3.33
#include <bits/stdc++.h>
using namespace std;
char nume1[101][101] , prenume1[101][101];
double x , y , z;
int n , cer , cnt;
double s;
struct poz
{
char nume[101] , prenume[101];
double media;
}A[101];
int maimic(poz a , poz b)
{
if(a.media > b. media) return 1;
else if(a.media == b.media && strcmp(a.nume , b.nume) < 0) return 1;
else if(a.media == b.media && strcmp(a.nume , b.nume) == 0 && strcmp(a.prenume , b.prenume) < 0) return 1;
else return 0;
}
int main()
{
cin >> n >> cer;
for(int i = 1 ; i <= n ; i++)
{
cin >> nume1[i] >> prenume1[i] >> x >> y >> z;
A[i].media = (x + y + z) /3;
strcpy(A[i].nume , nume1[i]);
strcpy(A[i].prenume , prenume1[i]);
s += A[i].media;
}
double medgen = s / n;
//cout << medgen << '\n';
for(int i = 1 ; i <= n ; i++)
if(A[i].media > medgen) cnt++;
if(cer == 1) cout << cnt;
else if(cer == 2)
{
cout << fixed << setprecision(2) << floor(medgen * 100) / 100 << '\n';
sort(A+1 , A+n+1 , maimic);
for(int i = 1 ; i <= n ; i++)
{
cout << A[i].nume << " " << A[i].prenume << " " << fixed << setprecision(2) << floor(A[i].media * 100) / 100 << '\n';
}
}
}