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

Problema #26 CelMaiMicNr pbinfo cat mai repede

Cerinţa
Să se scrie o funcție C++ care să returneze cel mai mic număr care se poate scrie cu cifrele unui număr natural transmis ca parametru.

Restricţii şi precizări

-numele funcției va fi cmmnr
-funcția va avea un parametru reprezentând numărul care se dă
-numărul care se dă va fi mai mic decât 1.000.000.000

Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

int cmmnr (int m)

{

   if (m<10) return m;

   else {

       int v[11],i,n,t;

       for (i=0;i<=10;++i) v[i]=0;

       int nc=0;

       while (m) {

           ++nc; v[nc]=m%10; m/=10;

       }

       for (i=1;i<nc;++i)

       for (int j=i+1;j<=nc;++j) {

           if (v[j]<v[i]){

               t=v[i]; v[i]=v[j]; v[j]=t;

           }

       }

       if (v[1]==0) {

           i=1;

           while (v[i]==0) ++i;  

            t=v[1]; v[1]=v[i]; v[i]=t;

       }    

      n=0;

      for (i=1; i<=nc; ++i) n=n*10+v[i];

      return n;  

   }

}

Explicație:

problema am rezolvat-o in apr 2018, azi asi face cu vectorul de frecventa ca nu ar fi necesara ordonarea vectorului de cifre. poate incerci... :)))

Asi incerca si eu ...  daca am putea comenta rezolvarile...

Iata viziunea de azi//// intreg codul (nu numai cmmnr )

cu vectorul de frecventa ..... mai mult mi-a placut aceasta varianta...  succese la cercetare :)))

#include <iostream>

using namespace std;

int cmmnr(int m)

{

   if (m<10) return m;

   else

   {

       int v[11]={0}, i,n=0,t;

       while (m)

       {

           ++v[m%10];

           m/=10;

       }

       if (v[0]>0)

       {

           i=1; while (v[i]==0) ++i;

           n=i;

           --v[i];

       }

       for (i=0; i<10; i++)

       {

           if (v[i])

           {

               for (t=1; t<=v[i]; t++)

                   n=n*10+i;

           }

       }

       return n;

   }

}

int main()

{

   int m;

   cin >> m;

   cout << cmmnr(m);

   return 0;

}

Alte întrebări interesante