De la tastatura se introduce un numar natural sa se spuna care este cel mai mare numar natural care se poate forma cu cifrele sale. AJUTORRR!!! AM NEVOIEE MAINE DAU TEST DIN ASTAA!!
Răspunsuri la întrebare
Răspuns:
#include <algorithm>
#include <iostream>
using std::cout, std::cin, std::endl, std::sort;
/* Funcția returneză numărul de cifre al unui număr */
static size_t nrCifre(int numar) {
size_t contorCifre{}; // ai un contor care inițial este egal cu 0
while (numar) { // cât timp numărul este diferit de 0
++contorCifre; // incrementăm contorul
numar /= 10; // și împărțim la 10 pentru a micșora numărul
}
return contorCifre; // la final returnăm contorul
}
int main() {
// nrCitit va fi variabila în care salvăm numărul de la tastatură, de i ne vom folosi pentru a adăuga în vector
int nrCitit, i{};
size_t dimensiuneVector;
cout << "Introdu un numar >> ";
cin >> nrCitit; // citim numărul
// creăm un vector fix de dimensiunea de care avem nevoie dacă numărul citit este 1234 dimensiunea vectorului va fi 4
dimensiuneVector = nrCifre(nrCitit);
int *vectorCifre = new int[dimensiuneVector];
// cât timp nrCitit este diferit de 0
while (nrCitit) {
vectorCifre[i++] =
nrCitit % 10; // luăm ultima cifră și-o adăugăm în vector
nrCitit /= 10;
}
// sortăm descrescător vectorul
sort(vectorCifre, vectorCifre + dimensiuneVector,
[](const int &primulNumar, const int &alDoileaNumar) -> bool {
return primulNumar > alDoileaNumar;
});
// și după efectiv afișăm cifrele (ne rezultă automat cel mai mare număr ce se poate forma cu cifrele numărului citit deoarece am sortat descrescător cifrele numărului citit din vector)
for (size_t j = 0; j < dimensiuneVector; ++j) cout << vectorCifre[j];
cout << endl;
// la final eliberăm memoria
delete[] vectorCifre;
return 0;
}
Explicație:
Poate nu e cea mai rapidă soluție, 100% sunt altele mai bune dar își face treaba și sincer mie mi se pare logică și ușoară.
Iei cifrele numărului, le bagi într-un vector, sortezi descrescător vectorul și după-l afișezi.
Mai ai o soluție ( mai eficientă ) care se folosește de un „hashed array” în care vei salva de câte ori apare cifra în număr și după parcurgi array-ul și calculezi cifrele... mie mi se pare mai complicată
Dacă cauți "Find maximum number that can be formed using digits of a given number" e primul rezultat de la GeekForGeeks, o găsești acolo.