问题描述
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。
求第 20190324 项的最后 4 位数字。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分。
1)我们明白这么大的项如果直接求累加最后会出long long 的范围,所以我们可以每一次累加之后对结果%10000,使得结果永远不超过要求的范围
(a+b+c+d+..+n)%K==a%K
当最高位已经溢出了K位时,我们只需要截断它的高位部分即可.
#include<iostream>
using namespace std;
const int N=20190324;
int f[N+1];
int main()
{
f[1] = f[2] = f[3] = 1;
for (long i = 4; i <= 20190324; ++i) {
f[i] = (f[i-1] + f[i-2] + f[i-3]) % 10000; //值得注意的是
}
cout << f[20190324];
return 0;
}
我们创造出一个数组空间可以循环迭代.