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

scrieti un subprogram care primeste un numar natural x si returneaza cel mai mare numar care se poate forma din cifrele numarului x

Răspunsuri la întrebare

Răspuns de andriesboss92
0

Răspuns:

#include <iostream>

using namespace std;

int cel_mai_mare(int x)

{

   int a[100]={0}; // initializare vector de frecventa

   int numar=0;

   

   /* memoram in vectorul de frecventa pe pozitia ultimei cifre din x numarul de aparitii ale fiecare cifre din numarul x citit de la tastatura*/

   while(x!=0)

   {

       a[x%10]++;

       x/=10;

   }

   

   for(int i=9;i>=0;i--)

       while(a[i]>0)

       {

           numar = numar * 10 + i; /* aici se calculeaza cel mai mare numar din cifrele lui x */

           a[i]--;

       }

   return numar;

}

int main()

{

   int x;

   cin>>x;

   cout<<cel_mai_mare(x); // afisam numar creat

}

Explicație:

Vectorul de frecvenţe reţine numărul de apariţii al fiecărei valori citite într-un vector.

Deci daca avem numarul x = 273

vectorul a[ ] va arata astfel:

a [ 0 ] : 0

a [ 1 ] : 0

a [ 2 ] : 1

a [ 3 ] : 1

a [ 4 ] : 0

a [ 5 ] : 0

a [ 6 ] : 0

a [ 7 ] : 1

Practic in instructiunea aceasta:

while(x!=0)

   {

       a[x%10]++;

       x/=10;

   }

doar pozitiile 2 3 si 7 din vectorul a vor primi valoarea 1, restul fiind implicit 0 datorita declaratiei initiale ( int a[100]={0} )

Parcurgem vectorul a[ ] de la 9 pana la 0 deoarece trebuie sa cream numarul cel mai mare ( deci cifrele sa fie in ordine descrescatoare ). Prin urmare acolo unde avem a[ i ] diferit de valoarea 0 ( adica unde gaseste ca avem cifra ) vom determina, prin variabila numar, numarul final prin operatii de calcul.

Pentru a intelege mai bine conceptul de vector de frecventa recomand sa rulezi programul pe foaie pentru doua, trei exemple si / sau sa citesti din alte surse de pe net despre vectorul de frecventa.

Iti dau eu doua exemple de numere pentru x:

Ex 1: 2377925

Ex 2: 105289

Pentru exemplul 1 se va afisa: 9775322

Pentru exemplul 2 se va afisa: 985210

Alte întrebări interesante