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 că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.