👤

Problema #301 (Frecventa1) de pe pbinfo:

Cerinţa
Se dau n numere naturale cu cel mult două cifre fiecare. Afişaţi valorile distincte în ordinea descrescătoare a numărului de apariţii.

Date de intrare
Fişierul de intrare frecventa1.in conţine pe prima linie numărul n; urmează cele n numere, dispuse pe mai multe linii şi separate prin spaţii.

Date de ieşire
Fişierul de ieşire frecventa1.out va conţine pe prima linie valorile distincte dintre cele n, în ordinea descrescătoare a numărului de apariţii.

Restricţii şi precizări
1 ≤ n ≤ 100000
dacă două valori apar de acelaşi număr de ori, se va afişa mai întâi valoarea mai mică



Exemplu
frecventa1.in

8
3 19 3 65 3 19 14 3
frecventa1.out

3 19 14 65


Răspuns :

Răspuns:

#include <stdio.h>

#include <stdlib.h>

int v[100],w[100];

int main()

{

   freopen ("frecventa1.in","r",stdin);

   freopen ("frecventa1.out","w",stdout);

   int n,a,i,j,p,max,aux;

   scanf ("%d",&n);

   for(i=0;i<n;i++) {

       scanf ("%d",&a);

       v[a]++;

   }

   for (i=0;i<100;i++)

       w[i]=i;

   for(j=99;j>0;j--) {

       max=v[0];

       p=0;

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

           if (v[i]<max ||(v[i]==max && w[p]<w[i])) {

               max=v[i];

               p=i;

           }

       v[p]=v[j];

       aux=w[p];

       w[p]=w[j];

       v[j]=max;

       w[j]=aux;

   }

   for (i=0;i<100;i++)

       if (v[i])

       printf ("%d ", w[i]);

   return 0;

}

este in limbajul c