Informatică, întrebare adresată de Andreutzu31, 9 ani în urmă

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 Razzvy
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;}
Răspuns de express
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;
}

Alte întrebări interesante