Rezolvare completă PbInfo #1984 cifra2

Cristian, elev în clasa a V-a, a primit o cutie cu N bomboane. Chiar dacă i-ar plăcea, știe că nu este indicat să le mănânce pe toate imediat. L-a întrebat pe tatăl său câte bomboane are voie să mănânce și acesta i-a răspuns că poate mânca doar un număr sănătos de bomboane. Cristian a fost nedumerit. Tatăl i-a explicat că un număr sănătos este un număr natural care poate fi modificat, până se obține o singură cifră, prin eliminarea celei mai mici cifre din el și înlocuirea fiecărei cifre rămase în număr cu diferența dintre valoarea ei și cifra minimă.
De exemplu, cifra minimă a numărului 3151 este 1 iar prin eliminarea ei din număr se obține 35, după care prin înlocuirea cifrelor rămase se obține 24 adică cifra 3 se înlocuiește cu cifra 2, cifra 5 cu 4, rezultând numărul 24; se continuă procedeul: cifra minimă a numărului 24 este 2 iar prin eliminarea ei din număr se obține 4, după care prin înlocuirea cifrei rămase se obține 2 moment în care a rămas o singură cifră. Așadar numărul sănătos obținut din 3151 este 2.
Ajutați-l pe Cristian să afle câte bomboane are voie să mănânce.

Cerința

Scrieţi un program care să citească numărul natural N şi care să determine:

a. cifra minimă din numărul N; (20% din punctaj)

b. numărul obținut după prima transformare a numărului N; (30% din punctaj)

c. numărul sănătos obținut din N. (50% din punctaj)

Date de intrare

Fișierul de intrare cifra2.in conține pe prima linie numărul natural N.

Date de ieșire

Fișierul de ieșire cifra2.out va conține cele trei valori cerute, fiecare pe câte un rând.

Restricții și precizări

  • 10 ≤ N ≤ 1000000;
  • Testele vor conține doar numere N care pot fi modificate conform cerinței.

Exemplu

cifra2.in

736191

cifra2.out

1 
6258 
2

Explicație

a. cifra minimă este 1

b. 73619173696258

c. 6258658436, se continuă 4364613, se continuă 1332.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema cifra2:

#include <fstream>

using namespace std;
ifstream fin("cifra2.in");
ofstream fout("cifra2.out");
int main()
{
    int N,copN,cmin,p;
    fin>>N;
    cmin=9;
    copN=N;
    while(copN)
    {
        if(copN%10<cmin)
            cmin=copN%10;
        copN=copN/10;
    }
    fout<<cmin<<'\n';
    copN=N;
    p=1;
    N=0;
    while(copN)
    {
        if(copN%10!=cmin)
        {
            N=N+(copN%10-cmin)*p;
            p=p*10;
        }
        copN=copN/10;
    }
    fout<<N<<'\n';
    while(N>9)
    {
        cmin=9;
        copN=N;
        while(copN)
        {
            if(copN%10<cmin)
                cmin=copN%10;
            copN=copN/10;
        }

        copN=N;
        p=1;
        N=0;
        while(copN)
        {
            if(copN%10!=cmin)
            {
                N=N+(copN%10-cmin)*p;
                p=p*10;
            }
            copN=copN/10;
        }
     
    }
    fout<<N<<'\n';
    fin.close();
    fout.close();
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1984 cifra2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1984 cifra2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!