题目要求:
给定数列 1, 1, 1, 3, 5, 9, 17,⋯,从第 4项开始,每项都是前 3项的和。
求第 2019032420190324 项的最后 4位数字
分析:这道题很容易就想到斐波那契数列,这正是它的变型。注意需要先取余,如果先将每项的结果求出来,最后再对其取余的话,求和的数据非常大会溢出。使用递归的话,耗费的的内存是比较大的。
重点:每一步取余,和算出最终结果取余结果一致
解法一:
#include <iostream>
using namespace std;
int main()
{
long long a=1,b=1,c=1,num=0;
for (int i = 4; i <= 20190324; ++i)
{
num=(a+b+c)%10000;
a=b;
b=c;
c=num;
}
cout<<num<<endl;
return 0;
}
方法二:递归
#include<iostream>
using namespace std;
long f[20190324];
int main(){
f[0] = f[1] = f[2] = 1;
for(int i = 3; i < 20190324; i++){
f[i] = (f[i - 1] + f[i - 2] + f[i - 3]) % 10000;
}
cout<<f[20190323]<<endl;
return 0;
}