👤

1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, 7, 4,...
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) suma tuturor numerelor prime aflate printre primii n termeni ai şirului din enunţ;
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ţ.



Răspuns :

#include <iostream>
using namespace std;

int main()
{
int a,b,c,n,i,k,s=0,nr=0,y;
int p;
cin>>n>>k>>p;
a=1; b=2;  y=p%60;
if(a==k)nr++;
if(b==k)nr++;
s=2;
for(i=3;i<=n;i++)
{
c=(a+b)%10;  
a=b; b=c;
if((c==2)||(c==3)||(c==5)||(c==7))s=s+c;
if(c==k)nr++;
}
a=1; b=2;
if(y==1)
c=a;
else
if(y==2)
c=b;
else
{
if(y==0)
y=60;
for(i=3;i<=y;i++)
{
c=(a+b)%10;  
a=b; b=c;
}
}
cout<<s;
cout<<endl<<nr;
cout<<endl<<c;
return 0;
}                             
Am si eu o solutie in C++ cu vectori. Succes!
#include <bits/stdc++.h>
using namespace std;
int ct, k, p, n, v[105], i, s;
int main ()
{
    cin >> n >> k >> p;
    v[1] = 1;
    v[2] = 2;
    for (i = 3; i<= 100; i ++)
        v[i] = (v[i-1] + v[i-2]) % 10;
    s = 0;
    for (i = 1; i <= n; i ++)
    {
        if (v[i] == 2 || v[i] == 3 || v[i] == 5 || v[i] == 7)
            s = s + v[i];
        if (v[i] == k) ct ++;
    }
    p = p % 60;
    cout << s << "\n";
    cout << ct << "\n";
    cout << v[p];
    return 0;
}