Rezolvare completă PbInfo #2802 Clasa

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 Adresa de email.

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!