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

Ionel a primit temă de la profesorul său: să scrie pe hârtie numerele de la 1 la n. Cum numărul n era destul de mare el s-a cam plictisit şi a început să se joace numărând de câte ori a apărut o anumită cifră în numerele ce trebuiau scrise. Cum număratul era o activitate destul de lentă, el a găsit o metodă simplă de a calcula de câte ori a apărut o cifră în toate numerele tipărite.
Cerinţă

Scrieţi un program care, citind numărul n şi o cifră nenulă c , afişează numărul de apariţii ale cifrei c în reprezentarea tuturor numerelor de la 1 la n.
Date de intrare

Din fişierul de intrare cifre2.in se citesc de pe prima linie numerele naturale n şi c , separate prin spaţiu.
Date de ieşire

Fişierul de ieşire cifre2.out va conţine o singură linie pe care va fi scris numărul de apariţii ale cifrei c în reprezentarea tuturor numerelor de la 1 la n.
Restricţii

0 0 Exemplu : 15 1

Va afisa : 8

În şirul 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15, cifra 1 apare de 8 ori.

Are cineva o idee de a face problema fara a numara toate cifrele?

Răspunsuri la întrebare

Răspuns de express
3
#include <fstream>
using namespace std;
int n,i,s,p,c;
int main()
{
    ifstream f("cifre2.in");
    ofstream g("cifre2.out");
    f>>n>>c;
    p=1;
    i=0;
    s=0;
    do
    {
        if (c<(n % 10)) s=s+((n / 10)+1)*p;
        if (c>(n % 10))  s=s+(n / 10)*p;
        if (c==(n % 10)) s=s+((n / 10)*p)+i+1;
        i=i+(n % 10)*p;
        n=n / 10;
        p=p*10;
    } while (n>0);
    g<<s;
    f.close();
    g.close();
    return 0;
}

Alte întrebări interesante