头像

Cyan

四川成都

深度强化学习炼丹师

2019年第十届蓝桥杯省赛-C.数列求值

2019年第十届蓝桥杯省赛-C.数列求值

2022-03-23 · 28次阅读 · 原创 · 数据结构与算法

原题链接

题面

给定数列 1,1,1,3,5,9,17,⋯,从第 4 项开始,每项都是前 3 项的和。

求第 20190324 项的最后 4 位数字。

题解

数学,斐波那契数列

题目只要求知道结果的后四位数字,则每次求和运算完成直接模掉 10000 保留最后四位数字即可。

由于数组开不到 20190324 那么大,这里使用状态压缩数组进行替换,f[i % 3] 表示第 i + 1 项的结果。

注意: 此题不能直接使用 long long 类型进行累加计算,在达到 70项的时候,就已经超出了 long long 的数据范围了,只能借助 模 10000 来快速解决。

答案:

4659

代码

#include <bits/stdc++.h> using namespace std; const int MOD = 1e4; int f[3] = {1, 1, 1}; int main() { int n = 20190324; for (int i = 3; i < n; i++) { f[i % 3] = (f[0] + f[1] + f[2]) % MOD; } cout << f[(n - 1) % 3] << endl; return 0; }

标题: 2019年第十届蓝桥杯省赛-C.数列求值
链接: https://www.fightingok.cn/detail/213
更新: 2022-09-18 22:48:45
版权: 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可