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:
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;
}