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
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;
}
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
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă