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

VREAU REZOLVAREA DE 100P , O AM DE 60 P PE LIMITA DE TIMP DEPASITA
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ăspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

#include <fstream>

#include <algorithm>

using namespace std;

struct data

{

   int nr,

   ap;

}v[101];

bool descr(const data &a, const data &b)

{

   if (a.ap != b.ap) return (a.ap>b.ap);

   return (a.nr<b.nr);

}

int main()

{

   ifstream f("frecventa1.in");

   ofstream g("frecventa1.out");

   int n, i, num;

   f >> n;

   for (i=0; i<100; ++i) v[i].nr=i;

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

   {

       f >> num;

       ++v[num].ap;

   }

   sort(v, v+100, descr);

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

       if (v[i].ap) g << v[i].nr << " ";

   return 0;

}

Explicație:

având varianta asta de 100, poţi să consulţi şi soluţia oficială...

Alte întrebări interesante