👤

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?


Nu Vreau Rezolvarea Propriuzisa Doar O Explicatie O Metoda Eficienta Este Sa Ordonez Numerele Pe Masura Ce Le Citesc Si Sa Le Pun Intrun Vector Apoi Sa Mai Parc class=

Răspuns :

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]);

   }

}