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
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:
Răspuns de
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
Matematică,
8 ani în urmă
Studii sociale,
8 ani în urmă
Engleza,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Religie,
9 ani în urmă
Biologie,
9 ani în urmă
Mersi!