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

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!!​


andrei750238: Pui cifrele in ordine descrescatoare
andreistefanita69420: vr sa ma ajuti ca nu stiu deloc
andreistefanita69420: vr rezolvarea completa

Răspunsuri la întrebare

Răspuns de Apollyon
2

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.


andreistefanita69420: in scratch..
Apollyon: :)) păi n-ai specificat c-o vrei în Scratch...
andreistefanita69420: poti sa o faci?
Alte întrebări interesante
Matematică, 9 ani în urmă