数列(C++)
用以下方式构造数列: 数列的第一个和第二个数都为 1,接下来每个数都等于前
面 2 个数之和。
给出一个正整数 a,要求数列中第 a 个数对 1000 取模的结果是多少。
输入:第 1 行是测试数据的组数 n,后面跟着 n 行输入。每组测试数据占 1 行,
包括一个正整数 a(1 <= a <= 1000000)。
输出:n 行,每行输出对应一个输入。输出应是一个正整数,为数列中第 a 个数
对 1000 取模得到的结果。
样例输入
4
5
2
19
1
样例输出
5
1
181
方法一:
使用A数组对所有结果进行储存,然后对所需的项目进行输出。
#include <bits/stdc++.h>//万能头
using namespace std;
int a[1000010];//数组往大开,这是个好习惯
int main()
{
a[1]=1;
a[2]=1;//按题目进行初始化
for(int i=3;i<=1000000;i++)
a[i]=(a[i-1]+a[i-2])%1000;//第a[i]项=a[i-1]+a[i-2],别忘了取模!!!
int n,t;//N表示共有多少组数据
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
cout<<a[t]<<endl;
}
return 0;
}
注意:别忘了取模。虽然简单,但容易TLE
导致作者差一点AC
方法二:
用A数组对每个测试点进行储存,然后找出最大的测试点,用MAX进行储存,只运行到a[max]即可
可以省时间,以免TLE
#include <bits/stdc++.h>//万能头
using namespace std;
int a[1000010];//数组大小看要求
int b[1000010];//存答案的
int main()
{
int n,max=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>max) max=a[i];
}//输入+找最大值
b[1]=1;
b[2]=1;//换汤不换药,还是熟悉的初始化
for(int i=3;i<=max;i++)
b[i]=(b[i-1]+b[i-2])%1000;//还是熟悉的取模
for(int i=1;i<=n;i++)
cout<<b[a[i]]<<endl;//输出答案的第a[i]项
return 0;
}
注意:别忘了取模!!!!!!!!!!
敢忘掉你试试
希望以上两种方法能帮助你们顺利AC!!有问题可以在评论区交流
验证方法:洛谷B2064 斐波那契数列,提交的话要去除取模的过程
如果你能关注新人煮波,那么我觉得这件事太酷了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】