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.
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 serbare:
#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;
}
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 #1460 serbare
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1460 serbare 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!