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

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 TheSolver
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 :)

Alte întrebări interesante