Răspuns :
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
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări suplimentare sau nevoie de ajutor, vă rugăm să ne contactați cu încredere. Așteptăm cu drag să reveniți și nu uitați să ne salvați în lista dumneavoastră de favorite!