题目:
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求
第 20190324 项的最后 4 位数字。
思路:
2e7,问题8大,直接开全局数组,然后暴力跑,因为只要最后4位(再多几位我也给不起了嗷),直接10000取模
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[20190325];
int main(){
a[0]=1;
a[1]=1;
a[2]=1;
a[3]=3;
for(ll i=3;i<20190324;i++){
a[i]=(a[i-1]+a[i-2]+a[i-3])%10000;
}
cout<<a[20190323]<<endl;
return 0;
}
写这篇感觉在水题子哈哈哈哈
2021.12.14更新
哈哈!没想到今天面试的面试官指出了我这道题的问题,可以优化内存,直接迭代,不开数组。
这就是大牛吧!!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a;
int main(){
ll a0=1;
ll a1=1;
ll a2=1;
for(ll i=3;i<20190324;i++){
a=(a0+a1+a2)%10000;
a0=a1;
a1=a2;
a2=a;
}
cout<<a<<endl;
return 0;
}