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

Nu vreau rezolvarea propriu-zisa, doar o explicatie.
O metoda eficienta este sa ordonez numerele, pe masura ce le citesc si sa le pun intr-un vector, apoi sa mai parcurg vectorul sa vad daca sunt ordinate?
Sau cu vector de frecventa?

Anexe:

boiustef: eu am realizat!!! nu am găsit altceva decât să creez un vector a vârfurilor stivelor formate din numerele cu aceeaşi ultimă cifră. Adică am folosit liste dinamice, mai exact vectorul c[10] din adresele vârfurilor de stive corespunzătoare ultimelor cifre a numerelor citite.
boiustef: s- a primit un cod nu voluminos, merită a fi cercetat.. cred eu:)))
boiustef: nu am folosi vector static. cu for citesc numerele din fisier şi corespunzător ultimei cifre pun numărul în stiva respectivă. Afişez cu for conţinutul lui c[10]
boiustef: dacă nu reuşeşti să realizezi ideea mea, la solicitare, postez codul meu
boiustef: să nu crezi că e un cod voluminos. Are 49 de linii (cu acoladele.. :))

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

aici postez o variantă cu cod foarte scurt, rapid, dar care foloseşte mai mult spatiu. Numerele citite din fişier le plasăm într-o matrice cu 10 linii. Găsim ultima cifră a numărului citit şi plasăm numărul în linia corespunzătoare ultimei cifre. Poziţiile plasării le memorăm într+un vector poz[10], care se actualizează după fiecare plasare a unui număr.

#include <iostream>

#include <fstream>

using namespace std;

short n,i,j,num, u, mat[10][10000],poz[10];

ifstream fin("date.txt");

int main()

{

   fin >> n;

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

   {

       fin >> num;

       u=num%10;

       mat[u][poz[u]++]=num;

   }

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

   {

       for (j=0; j<poz[i]; j++)

           cout << mat[i][j] << " ";

   }

}

Explicație:

A doua variantă este cu vector de liste simplu înlănţuite (vezi mai sus în comentarii explicaţiile) Foloseşte mai puţin spaţiu, dar e un cod mai voluminos...

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.txt");

struct Nod{

int val;

Nod* next;

};

void push(Nod *& vf, int num){

Nod* nou=new Nod;

nou->val=num;

nou->next=vf;

vf=nou;

}

void afisare(Nod *vf)

{

   Nod *p=vf;

       while (p!=NULL)

       {

           cout << p->val << " ";

           p=p->next;

       }

}

int n,i,num,u;

Nod *c[10];

int main()

{

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

       c[i]=NULL;

   fin >> n;

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

   {

       fin >> num;

       u=num%10;

       if (c[u]!=NULL) push(c[u],num);

       else

       {

           c[u]=new Nod;

           c[u]->val=num;

           c[u]->next=NULL;

       }

   }

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

   {

       if (c[i]!=NULL)

           afisare(c[i]);

   }

}

Alte întrebări interesante