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.
https://www.pbinfo.ro/?pagina=probleme&id=26
Dacă puteți să-mi spuneți ce este greșit în cod de îmi dă doar 80 de puncte.
Anexe:
Răspunsuri la întrebare
Răspuns de
21
Pentru numarul 41001251, programul tau afiseaza 11100245, dar numarul corect este 10011245.
Asa ca afisezi cifra min o singura data, apoi afisezi tot ce ramane, in ordine crescatoare.
Aici este codul. Am incercat sa modific cat mai putin.
int cmmnr(int n){
int v[10], Nr = 0, cod = 1, min = 10;
for(int i = 0; i <= 9; ++i)
v[i] = 0;
while(n != 0){
v[n % 10]++;
if(n % 10 < min && n % 10 != 0)
min = n % 10;
n /= 10;
}
Nr = min; //Prima cifra
v[min]--; //Am pus deja prima cifra
for(int i = 0;i <= 9; ++i) //Incepem de la 0
{
while(v[i] != 0){
Nr = Nr * 10 + i;
v[i]--;
}
if(i == min)
while(v[0] != 0)
{
Nr = Nr * 10;
v[0]--;
}
}
return Nr;}
Asa ca afisezi cifra min o singura data, apoi afisezi tot ce ramane, in ordine crescatoare.
Aici este codul. Am incercat sa modific cat mai putin.
int cmmnr(int n){
int v[10], Nr = 0, cod = 1, min = 10;
for(int i = 0; i <= 9; ++i)
v[i] = 0;
while(n != 0){
v[n % 10]++;
if(n % 10 < min && n % 10 != 0)
min = n % 10;
n /= 10;
}
Nr = min; //Prima cifra
v[min]--; //Am pus deja prima cifra
for(int i = 0;i <= 9; ++i) //Incepem de la 0
{
while(v[i] != 0){
Nr = Nr * 10 + i;
v[i]--;
}
if(i == min)
while(v[0] != 0)
{
Nr = Nr * 10;
v[0]--;
}
}
return Nr;}
Răspuns de
19
Am si eu o alta sursa in C++. Succes!
int cmmnr(int n)
{
int i, j, nr = 0, cif, v[11]={0};
while (n)
{
cif = n % 10;
v[cif] = v[cif] + 1;
n = n / 10;
}
if (v[0] > 0)
for (i = 1; i <= 9; i ++)
if (v[i] > 0)
{
nr = nr * 10 + i;
v[i] = v[i] - 1;
break;
}
for(i = 0; i <= 9; i ++)
for (j = 1; j <= v[i]; j++)
nr = nr * 10 + i;
return nr;
}
int cmmnr(int n)
{
int i, j, nr = 0, cif, v[11]={0};
while (n)
{
cif = n % 10;
v[cif] = v[cif] + 1;
n = n / 10;
}
if (v[0] > 0)
for (i = 1; i <= 9; i ++)
if (v[i] > 0)
{
nr = nr * 10 + i;
v[i] = v[i] - 1;
break;
}
for(i = 0; i <= 9; i ++)
for (j = 1; j <= v[i]; j++)
nr = nr * 10 + i;
return nr;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Fizică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă