Informatică, întrebare adresată de Axbolt, 9 ani în urmă

Cerința

La o serbare sunt n grupe de copii care poartă p tipuri de uniforme. Scrieţi un program care să afişeze pe ecran tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Afişarea se va face pe o singură linie, valoriile fiind separate printr-un spaţiu.

Date de intrare

Fișierul de intrare serbare.in conține, pe prima linie, numerele n şi p, separate printr-un spaţiu, iar pe următoarele n linii câte două valori separate printr-un spaţiu ce reprezintă numărul de copii dintr-o grupă şi respectiv tipul de uniformă pe care aceştia îl poartă.

Date de ieșire

Fișierul de ieșire serbare.out va conţine tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Numerele vor fi separate printr-un spaţiu.

Restricții și precizări

1 ≤ n ≤ 1000
1 ≤ p ≤ 11
Numărul de copii dintr-o grupă este cel mult 100
Fiecare mărime de uniformă din intervalul [1,p] este purtată de cel puţin un copil.
Exemplu:

serbare.in

5 3
20 2
20 3
30 2
20 1
10 1
serbare.out

2 1 3
Explicaţii:

Tipul 2 de uniformă este purtat de 50 de copii, tipul 1 de 30 de copii, iar tipul 3 de 20 de copii.

Răspunsuri la întrebare

Răspuns de ap53
12
#include <fstream>

struct _uniforma {
    int marime, numarCopii;
};

int main() {
    std::ifstream fin("serbare.in");
    std::ofstream fout("serbare.out");
    _uniforma uniforma[15], aux;
    int copii, uniforme, marimi[15] = {0};
    fin >> copii >> uniforme;
    for(int i = 1; i <= copii; i++) {
        int marime, nrCopii;
        fin >> nrCopii >> marime;
        marimi[marime] += nrCopii;
    }

    for(int i = 1; i <= uniforme; i++) {
        uniforma[i].marime = i;
        uniforma[i].numarCopii = marimi[i];
    }

    for(int i = 1; i < uniforme; i++)
        for(int j = i + 1; j <= uniforme; j++)
            if(uniforma[i].numarCopii < uniforma[j].numarCopii) {
                aux = uniforma[i];
                uniforma[i] = uniforma[j];
                uniforma[j] = aux;
            }

    for(int i = 1; i <= uniforme; i++)
        fout << uniforma[i].marime << ' ';
    return 0;
}
Alte întrebări interesante