Rezolvare completă PbInfo #951 Cifre7

Se generează un şir de cifre ai cărui primi termeni sunt, în această ordine:
1, 1, 2, 4, 7, 3, 4, 4, 1, 9, 4, 4, 7, 5, 6, 8,...

Cerința

Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale n, k şi p şi care să determine:

a) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ;
b) cel de-al p-lea termen al şirului din enunţ.

Date de intrare

Programul citește de la tastatură numerele n k p.

Date de ieșire

Programul va afișa pe ecran două numere naturale:

  • primul număr va reprezenta numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ;
  • al doilea număr va reprezenta cel de-al p-lea termen al şirului din enunţ.

Restricții și precizări

  • Numerele n k p sunt naturale
  • 17 ≤ n ≤100; 0 ≤ k ≤ 9; 1≤ p ≤ 2000000000
  • Pentru rezolvarea corectă a cerinţei a) se acordă 30% din punctaj iar pentru cerinţa b) 70% din punctaj.

Exemplu

Intrare

19 4 26

Ieșire

5
7

Explicație

Primii 19 termeni ai şirului sunt: 1,1,2,4,7,3,4,4,1,9,4,4,7,5,6, 8,9,3,0.

Primul număr afişat este 5, deoarece sunt 5 cifre din șir egale cu k (k=4) printre primii n=19 termeni ai şirului.

Al doilea număr afişat este 7, deoarece cel de-al p-lea (p=26) termen al şirului este 7.

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

#include <iostream>
using namespace std;

int main()
{
    int p , a , b , c , d , n , i , k , nr = 0 , y;
    cin >> n >> k >> p;
    a = 1; b = 1; c = 2;
    y = p % 124;
    if(a == k)
        nr ++;
    if(b == k)
        nr ++;
    if(c == k)
        nr ++;
    for(i = 4 ; i <= n ; i ++)
    {
        d = (a + b + c) % 10;
        a = b; b = c; c = d;
        if(d == k)
            nr ++;
    }
    a = 1; b = 1; c = 2;
    if(y == 1)
        d = a;
    else 
        if(y == 2)
            d = b;
        else
            if(y == 3)
                d = c;
            else
            {
                if(y == 0)
                    y = 124;
                for(i = 4 ; i <= y ; i++)
                {
                    d = (a + b + c) % 10;
                    a = b; b = c; c = d;
                }
            }
    cout << nr << endl << d <<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 #951 Cifre7

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