Răspuns :
Program C++
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bac.in");
ofstream g("bac.out");
int main()
{
unsigned x, v[10] = { 0 };
int i;
//Cat timp exista numere in fisier citeste
while (f) {
f >> x;
//Descompune numar in cifre. Incrementeaza elementele corespunzatoare cifrelor gasite
while (x) {
v[x % 10]++;
x = x / 10;
}
}
//Afiseaza numarul format
for (i = 9; i >= 0; i--) {
//Afiseaza cate o cifra pentru fiecare valoare din vector
while (v[i]) {
g << i;
v[i]--;
}
}
}
Explicatie :
Folosim un vector v cu 10 pozitii (de la 0 la 9). Pe fiecare pozitie memoram numarul de cifre gasite in toate valorile citite din fisier.
La final, pentru a forma cel mai mare numar cu aceste cifre parcurgem vectorul in sens invers (de la 9 la 0) si afisam pozitia pe care suntem (cifra corespunzatoare) de atatea ori cat indica valoarea din vector.
- Algoritmul e eficient dpdv al timpului de executie pentru ca trecerea prin sirul de numere realizandu-se o singura data.
- Algoritmul e eficient dpdv al spatiului pentru ca valorile citite nu sunt memorate. Sunt folosite doar variabile simple si un tablou unidimensional de 10 elemente.
Vă mulțumim pentru vizita pe platforma noastră dedicată Informatică. Sperăm că informațiile oferite v-au fost utile. Dacă aveți întrebări sau aveți nevoie de sprijin suplimentar, vă încurajăm să ne contactați. Revenirea dumneavoastră ne bucură, iar dacă v-a plăcut, nu uitați să adăugați site-ul nostru la favorite!