1188:菲波那契数列(2)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 70272 通过数: 26790
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。
【输入】
第11行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1≤a≤1000000)。
【输出】
n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。文章来源:https://www.toymoban.com/news/detail-833170.html
【输入样例】
4
5
2
19
1
【输出样例】
5
1
181
1
题解
用递推,用b数组记录菲波那契数列的每一位求余1000的值,b1是当前b数组的最高位数,如果当前想要的位数比b数组最高位数还要高的话计算,更新b数组的最高位数,否则直接输出。计算每一位可以用前两位的值求余1000,防止最后结果过大超出int文章来源地址https://www.toymoban.com/news/detail-833170.html
源代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b[1000001]={-1},b1=2;
int main()
{
b[1]=b[2]=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a<=b1)
{
cout<<b[a]<<endl;
}
else
{
for(int i=b1+1;i<=a;i++)
{
b[i]=(b[i-1]+b[i-2])%1000;
}
cout<<b[a]<<endl;
b1=a;
}
}
}
到了这里,关于信息学奥赛一本通1188:菲波那契数列(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!