Rezolvare completă PbInfo #1347 kcifra

Cerința

Se construiește un număr natural N ale cărui prime 51 cifre sunt:
N = 112233445566778899100111122133144155166177188199200......

Deduceți regula prin care se construiește numărul N și stabiliți care este cea de a K-a cifră din scrierea acestui număr.

Scrieţi un program care citeşte numărul K şi care determină cea de a K-a cifră din scrierea lui N.

Date de intrare

Programul citește din fișierul kcifra.in, de pe prima linie, numărul natural nenul K.

Date de ieșire

Programul scrie în fişierul kcifra.out, pe prima linie, un număr natural (o cifră) reprezentând cea de a K-a cifră din scrierea numărului N construit.

Restricții și precizări

  • 1 ≤ K ≤ 588888
  • K număr natural

Exemplul 1:

Intrare

10

Ieșire

5

Explicație

Primele 10 cifre ale lui N sunt: 1 1 2 2 3 3 4 4 5 5.

Exemplul 2:

Intrare

51

Ieșire

0

Explicație

Primele 51 cifre ale lui N sunt: 112233445566778899100111122133144155166177188199200.

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

#include <fstream>
using namespace std;

fstream f("kcifra.in");
ofstream g("kcifra.out");

int main()
{
    int k;
    f>>k;
    int c,nrcif=0,nr;
    if(k<=18)c=(k+1)/2;   //x_
    else
        if(k<=288)
        {   ///xy_
            nr=9; nrcif=18;
            while(nrcif+3<=k)
                {
                    nrcif+=3;nr++;
                }
            if (nrcif==k)
                c=nr%10;
            else
                {
                    nr++;
                    if(nrcif+1==k)
                        c=nr/10;
                    else
                        c=nr%10;
                }
        }
        else
            if(k<=3888)
            {   ///xyz_
                nr=99; nrcif=288;
                while(nrcif+4<=k)
                    {
                        nrcif+=4; nr++;
                    }
                if (nrcif==k)
                    c=nr%10;
                else
                    {
                        if(nrcif+1==k)
                            c=nr/100;
                        else
                            c=nr/10%10;
                    }
            }
        else
            if(k<=48888)
            {   ///xyzt_
                nr=999; nrcif=3888;
                while(nrcif+5<=k)
                    {nrcif+=5;nr++;}
                if (nrcif==k)
                    c=nr%10;
                else
                {
                    if(nrcif+1==k)c=nr/1000;
                    else
                        if(nrcif+2==k)c=nr/100%10;
                        else
                            if(nrcif+3==k)c=nr/10%10;
                            else
                                c=nr/10%10;
                }
            }
    else
        { ///xyztu_
            nr=9999; nrcif=48888;
            while(nrcif+6<=k)
                { nrcif+=6;nr++;}
            if (nrcif==k)c=nr%10;
            else
            {
                if(nrcif+1==k)c=nr/10000;
                else
                    if(nrcif+2==k)c=nr/1000%10;
                    else
                    if(nrcif+3==k)c=nr/100%10;
                    else
                    if(nrcif+4==k)c=nr/10%10;
                    else
                    c=nr/10%10;
            }
        }
    g<<c<<endl;
    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 #1347 kcifra

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