题目
给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求第20190324 项的最后4 位数字。
思路
很容易就想到使用递归,跟斐波那契很像,就是递推式变了,但这里很显然会爆栈,因此不能使用递归。还有一个陷阱就是直接算到第20190324项是一定会溢出的,因此根据题意只需要保存后四位,即对大于10000的项对10000求余即可。
代码
#include <iostream>
using namespace std;
int solve(int n) {
if (n <= 3) {
return 1;
}
int a = 1, b = 1, c = 1, res;
for (int i = 4; i <= n; i++) {
// 这里要记得取余
res = (a + b + c) % 10000;
//往后移动一位
a = b;
b = c;
c = res;
}
return res;
}
int main() {
int n = solve(20190324);
cout<<n<<endl;
return 0;
}
/2222/2222/2222/2222vv/2222/2222/2222/2222vv/2222/222vv/2222/2222/2222/2222vv