Informatică, întrebare adresată de mary2010girl, 8 ani în urmă

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 razergov
2

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("serbare.in");

ofstream fout("serbare.out");

struct sistem{

   int Grupa;

   int Tipuri;

}g[101],inter;

int main()

{

   int n,i,Grupa,Tipuri,aux[15]={0},p,j;

   fin>>n>>p;

   for(i=1;i<=n;i++)

   {

       fin>>Grupa>>Tipuri;

       aux[Tipuri]+=Grupa;

   }

   for(i=1;i<=p;i++)

   {

       g[i].Tipuri=i;

       g[i].Grupa=aux[i];

   }

   for(i=1;i<p;i++)

   {

       for(j=i+1;j<=p;j++)

           if(g[i].Grupa<g[j].Grupa)

           {

               inter=g[i];

               g[i]=g[j];

               g[j]=inter;

           }

   }

   for(i=1;i<=p;i++)

       fout<<g[i].Tipuri<<" ";

}

Explicație:

Alte întrebări interesante