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 au egală 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.
- pentru datele reale se recomandă folosirea tipurilor de date în dublă precizie (tipul C/C++
double
)
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
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Clasa:
#include<bits/stdc++.h>
using namespace std;
struct order
{
string nume,prenume;
double medie1,medie2,medie3,medieg;
};
int comp(order i,order j)
{
if(i.medieg>j.medieg)
return 1;
if(i.medieg==j.medieg && i.nume<j.nume)
return 1;
if(i.medieg==j.medieg && i.nume==j.nume && i.prenume<j.prenume)
return 1;
return 0;
}
int main()
{
order w[101];
string s;
int n,p;
double g=0;
cin>>n>>p;
cin.get();
for(int i=0;i<n;i++)
{
vector<string> v;
getline(cin,s);
istringstream buffer(s);
for(string word;buffer>>word;)
v.push_back(word);
for(int j=0;j<v.size();j++)
switch(j)
{
case 0: w[i].nume=v[j]; break;
case 1: w[i].prenume=v[j]; break;
case 2: w[i].medie1=stoi(v[j]); break;
case 3: w[i].medie2=stoi(v[j]); break;
case 4: w[i].medie3=stoi(v[j]); break;
}
w[i].medieg=(w[i].medie1+w[i].medie2+w[i].medie3)/3;
g+=w[i].medieg;
}
g/=n;
if(p==1)
{
int ap=0;
for(int i=0;i<n;i++)
if(w[i].medieg>=g)
ap++;
cout<<ap;
}
else
if(p==2)
{
cout<<fixed<<setprecision(2)<<g<<'\n';
sort(w,w+n,comp);
for(int i=0;i<n;i++)
cout<<w[i].nume<<" "<<w[i].prenume<<" "<<fixed<<setprecision(2)<<w[i].medieg<<'\n';
}
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2802 Clasa
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2802 Clasa de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!