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

Cum se aseaza un sir de numere n citite la intamplare (fara sa se repete numarul in sir) in ordine descrescatoare?

Răspunsuri la întrebare

Răspuns de AdiAfr
1

#include <iostream>

int vect_frecv[10000];

using namespace std;

int main()

{

   int n,vect_nr[100],i;

   int maxim=0;

   cin>>n;

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

       cin>>vect_nr[i];

               vect_frecv[vect_nr[i]]++;

       if(vect_nr[i]>maxim)

           maxim = vect_nr[i];

   }

   for(i=maxim;i>=0;i--)

       if(vect_frecv[i]>0)

           cout<<i<<" ";

   return 0;

}


Asta e un cod simplut ca sa-ti rezolve problema. Singura problema e ca merge numai pentru numere naturale, adica intregi si pozitive. Daca ai numere negative sau cu virgula trebuie sa faci cu metode de sortare.

In codul de mai sus am folosit un vector de frecventa. L-am declarat global, adica inainte de functia main ca sa aiba toate valorile initializate cu 0, gen v[0] = 0, v[1] = 0... . In celalalt vector avem sirul de numere. In prima bucla for citim numerele si la fiecare numar citit ii mareste frecventa lui in vectoru de frecventa, adica:


Spre exemplu citeste 49, atunci la vect_frecv[49] adunam 1. Mai avem o variabila maxim care practic gaseste numarul cel mai mare din sir. La al doilea for se parcurge sirul vect_frecv de la maxim la 0(ca sa putem scrie numerele descrescator), si scriem indecsii vectorului(i) la care valoarea e mai mare ca 0 (vect_frecv[i] > 0).


ProMinecraft69: Multumesc.
AdiAfr: Cu placere!
Alte întrebări interesante