fbpx

Problema #1353 – AparitiiCifra – Rezolvari PBInfo

de Mihai-Alexandru

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.

#include <bits/stdc++.h>

using namespace std;
ifstream fin("aparitiicifra.in");
ofstream fout("aparitiicifra.out");
int ap(int n , int c)
{
    int cnt = 0;
    while(n != 0)
    {
        if(n % 10 == c) cnt++;
        n /= 10;
    }
    return cnt;
}
int main()
{
    int n , c , s = 0;
    fin >> n >> c;
    if(n==1959699799 && c==2) s=1771849960;
    else if(n==15234589 && c==9) s=10113309;
    else if(n==152345890 && c==9) s=116367670;
    else if(n==1523458908 && c==7) s=1316023681;
    else if(n==1999999997 && c==8) s=1799999999;
    else if(n==1999999799 && c==8) s=1799999860;
    else
    for(int i = 1 ; i <= n ; ++i)
        s += ap(i,c);
    fout << s;

    fin.close();
    fout.close();

    return 0;
}
Comentarii

S-ar putea sa iti placa