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

Cerinţa:


Să se scrie o funcție care are ca parametru un număr natural n și returnează cel mai mare număr care poate fi obținut mutând, pe rând, prima cifră a numărului n și a celor obținute pe parcurs, pe ultima poziție. Nu se vor folosi șiruri de caractere și tablouri auxiliare.


Restricţii şi precizări:


numele funcției va fi nrmaxim

funcția va avea un parametru reprezentând numărul dat, care va fi mai mic decât 1.000.000.000


Exemplu:


nrmaxim(n=4273) = 7342 – este cel mai mare număr dintre 2734, 7342, 3427, 4273.


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.



Eu am rezolvat problema, trece de primul test din cele 5, spunand ca la restul este depasita limita de timp.

Aici e rezolvarea mea (stiu ca m-am complicat, probabil era mai usor):


#include (math)

int nrmaxim (int n){
int cif,l,nr,x,aux,maxim;

maxim=n;
nr=0;
l=n;
cif=n%10;

while (l>0){
cif=l%10;
l=l/10;
nr++;
}

x=n*10+cif;
l=x-cif*pow(10,nr);
while (l!=n){
aux=l;
if(maxim maxim=l;
while (l>0){
cif=l%10;
l/=10;
}
x=aux*10+cif;
l=x-cif*pow(10,nr);
}
return maxim;
}

Răspunsuri la întrebare

Răspuns de boiustef
4

Răspuns:

int nrmaxim (int n)

{

   int m=n,max=n,nrc=1,c,f=1;

   while (m>9) { ++nrc; m/=10; f*=10;}

   for (int i=1;i<nrc;++i) {

     c=n/f; n=n%f*10+c;

     if (n>max) max=n;

   }

   return max;

}

Explicație:


Mihai2628: Chiar era simplu
Mersi!
boiustef: cu pl[cere, seccese
Răspuns de CinevaFaraNume
2

int nrmaxim(int n){

   int p = 1,len = 0, newn = n,max = n;

   while(p < n)p*=10,len++;

   for(int i = 0; i < len; i++){

       newn = newn / 10 + newn % 10 * (p/10);

       if(newn>max)max = newn;

   }

   return max;

}

Alte întrebări interesante