Cerinţa
Se citește un număr natural n. Determinați cel mai mare număr care se poate obține prin eliminarea unei singure cifre din scrierea numărului n.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieşire
Programul afișează pe ecran numărul cerut M.
Restricţii şi precizări
1 ≤ n ≤ 1.000.000.000
Exemplu
Date de intrare
423234
Date de ieșire
43234
#include<iostream>
using namespace std;int n,mi,nr,p,aux,c;int main(){ cin>>n; if(n<=9) cout<<"0"; else { mi=10; aux=n; while(aux!=0) { c=aux%10; aux=aux/10; if(c<mi) mi=c; } aux=n; nr=0; p=1; aux=n; while(aux!=0) { c=aux%10; aux=aux/10; if(c!=mi) {nr=nr+p*c; p=p*10; } else break; } while(aux!=0) {c=aux/10; aux=aux/10; nr=nr+c*p; p=p*10; } cout<<nr; } return 0;} ce este gresit ?
Răspunsuri la întrebare
Răspuns de
2
Imi e putin cam greu sa imi dau seama ce ai gresit, dar am reusit eu sa o rezolv, poate iti dai tu seama care a fost problema la tine.
#include<iostream>
using namespace std;int n,mi,p,aux,c, pAux = 1, pX = 1;
int main()
{
cin>>n;
if(n<=9){cout << "0";}
else {mi=10;}
aux=n;
while(aux!=0)
{
c=aux%10;
aux=aux/10;
if(c<mi) {mi=c;}
}
aux=n;
while (aux != 0)
{
aux /= 10;
pAux *= 10;
}
p=pAux;
aux=n;
while(p >= 10)
{
p /= 10;
pX *= 10;
c=(n/p)%10;
if (c == mi)
{
cout << (n / (p*10))*(pAux/pX)+n%p;
break;
}
}
return 0;
}
Unde : n = numarul citit, mi = cifra minima din numar, p = 10^nr cifre, c = cifra, in pAux se tine valoare lui p deoarece e necesara la final, pX = 10 ^ nr de cifre inainte de cea mai mica cifra + 1.
Sa zicem ca numarul e 423234.
mi = 1
p = 10000
pAux =1000000
pX = 100
Numarul va fi : 4 * 1000 + 3234 adica 423234;
Deci eu am luat cea mai mica cifra de la stanga la dreapta si am scos-o din numar. Sper ca nu am uitat de vreun caz particular :)
#include<iostream>
using namespace std;int n,mi,p,aux,c, pAux = 1, pX = 1;
int main()
{
cin>>n;
if(n<=9){cout << "0";}
else {mi=10;}
aux=n;
while(aux!=0)
{
c=aux%10;
aux=aux/10;
if(c<mi) {mi=c;}
}
aux=n;
while (aux != 0)
{
aux /= 10;
pAux *= 10;
}
p=pAux;
aux=n;
while(p >= 10)
{
p /= 10;
pX *= 10;
c=(n/p)%10;
if (c == mi)
{
cout << (n / (p*10))*(pAux/pX)+n%p;
break;
}
}
return 0;
}
Unde : n = numarul citit, mi = cifra minima din numar, p = 10^nr cifre, c = cifra, in pAux se tine valoare lui p deoarece e necesara la final, pX = 10 ^ nr de cifre inainte de cea mai mica cifra + 1.
Sa zicem ca numarul e 423234.
mi = 1
p = 10000
pAux =1000000
pX = 100
Numarul va fi : 4 * 1000 + 3234 adica 423234;
Deci eu am luat cea mai mica cifra de la stanga la dreapta si am scos-o din numar. Sper ca nu am uitat de vreun caz particular :)
Alte întrebări interesante
Matematică,
8 ani în urmă
Geografie,
8 ani în urmă
Biologie,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă