2802 - Clasa

De la Universitas MediaWiki

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

Încărcare soluție

Lipește codul aici

function comp(i, 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;
}
var w = new Array(101);
var s;
var n, p;
var g = 0;
n = parseInt(prompt());
p = parseInt(prompt());
prompt();
for (var i = 0; i < n; i++) {
    var v = [];
    s = prompt();
    var buffer = s.split(" ");
    for (var j = 0; j < buffer.length; j++) {
        v.push(buffer[j]);
    }
    switch (j) {
        case 0:
            w[i].nume = v[j];
            break;
        case 1:
            w[i].prenume = v[j];
            break;
        case 2:
            w[i].medie1 = parseInt(v[j]);
            break;
        case 3:
            w[i].medie2 = parseInt(v[j]);
            break;
        case 4:
            w[i].medie3 = parseInt(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) {
    var ap = 0;
    for (var i = 0; i < n; i++) {
        if (w[i].medieg >= g)
            ap++;
    }
    console.log(ap);
} else if (p === 2) {
    console.log(g.toFixed(2));
    w.sort(comp);
    for (var i = 0; i < n; i++) {
        console.log(w[i].nume + " " + w[i].prenume + " " + w[i].medieg.toFixed(2));
    }
}