Rezolvare completă PbInfo #1353 AparitiiCifra

Cerința

Determinaţi numărul de apariţii a unei cifre c în reprezentarea tuturor numerelor mai mici sau egale cu un n dat.

Date de intrare

Pe prima linie a fişierului aparitiicifra.in se află numerele n şi c separate prin spaţii.

Date de ieșire

Pe prima linie a fişierului aparitiicifra.out se scrie numărul de apariţii a cifrei c în reprezentarea tuturor numerelor mai mici sau egale cu n.

Restricții și precizări

  • 0 < n < 2.000.000.000
  • 0 < c < 10

Exemplu

aparitiicifra.in

15 1

aparitiicifra.out

8

Explicație

Cifra 1 a apărut în numerele 1, 10, 11 (de două ori), 12, 13, 14, 15.

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

program numere;
var c,n:longint;
    f:text;
function performant(c,k:longint):longint;
var i,j,n,z:longint;
begin
n:=0;{nr de aparitii a cifrei c}
j:=1;{pornim de la ultima cifra(j=10-penultima cifra,j=100-antepenultima...)}
z:=0;{in z memoram ultimele cifre ale numarului k, care au fost extrase}
while k>=c do
 begin
 if k mod 10>c then n:=n+(k div 10+1)*j
  else if k mod 10=c then n:=n+(k div 10)*j+z+1
         else n:=n+(k div 10)*j;
 z:=z+(k mod 10)*j;
 k:=k div 10;
 j:=j*10;
 end;
performant:=n;
end;
Begin
assign(f,'aparitiicifra.in');reset(f);
readln(f,n,c);
close(f);
assign(f,'aparitiicifra.out');rewrite(f);
writeln(f,performant(c,n));
close(f);
End.

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 #1353 AparitiiCifra

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