👤

Va rog frumos !!
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.


Răspuns :

#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; }