Rezolvare completă PbInfo #2442 cifre006

Cerința

Valentin, elev în clasa a V-a, e fascinat de cifre. Îi place să mute cifrele unui număr de pe o poziție pe alta. Astfel, pentru un număr N și o cifră k, mută toate cifrele egale cu k la început, după care așază celelalte cifre în ordinea în care apăreau în N. Desigur, există și situații în care numărul cifrelor lui N se micșorează sau situații în care numărul N nu se modifică.
De exemplu, dacă numărul N este 134112 și cifra k este 1, după mutarea cifrelor se obține 111342.
Pornind de la numărul N și cifra k știți ce număr obține Valentin?
Scrieţi un program care să citească numărul natural N şi cifra k și care să determine:

a) de câte ori apare cifra k în numărul N; (30% din punctaj)
b) numărul obținut după modificarea numărului N; (70% din punctaj)

Date de intrare

Pe prima linie a fișierului cifre006.in se află numărul natural N și cifra k separate printr-un spațiu.

Date de ieșire

Fișierul de ieșire cifre006.out va conține două valori, fiecare pe câte un rând. Prima valoare este numărul de cifre k existente în N, iar a doua valoare este numărul obținut din N după modificare.

Restricții și precizări

  • 1 ≤ N ≤ 1000000000
  • numărul N după modificare poate avea cifre mai puține

Exemplu

cifre006.in

134112 1

cifre006.out

3
111342

Explicație

cifra 1 apare de 3 ori.
134112111342, cele trei cifre 1 se mută la început iar cifrele 3, 4, 2 se pun la sfârșit în ordinea în care au apărut în 134112.

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 cifre006:

#include <fstream>

using namespace std;
ifstream fin("cifre006.in");
ofstream fout("cifre006.out");
int N, k, cif, ap, p = 1, N1, N2;

int main()
{
    fin >> N >> k;
    while(N)
    {
        cif = N % 10;
        if(cif == k)
        {
            ap++;
            N1 = N1 * 10 + cif;
        }

        else
        {
            N2 = N2 + cif * p;
            p = p * 10;
        }
        N = N / 10;
    }
    fout << ap << '\n' <<N1*p+N2;
    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 #2442 cifre006

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2442 cifre006 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!