一本通1188:菲波那契数列(2)

本题考查递推知识

下面是题面:

【题目描述】

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。

给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

【输入】

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 ≤ a ≤ 1000000)。

【输出】

n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。

【输入样例】

4
5
2
19
1

【输出样例】

5
1
181
1

代码实现

#include<iostream>
#include<cstdio>
using namespace std;
int n;
long long a[1000001];  //开数组
/*计算*/
int chg(int j)
{
    long long x=1,y=1,temp=0,p;  //前两个数都为1
    for(p=3;p<=j;p++)
    {
        temp=(x+y)%1000;
        x=y;
        y=temp;
    }
    return y;  //返回结果
}
int main()
{
    int i;
    /*输入*/
    cin>>n;
    for (i = 1; i <= n; i++)
    {
        cin>>a[i];
        printf("%d\n",chg(a[i]));
    }
    return 0;
}

代码结束了


附赠斐波那契数列代码

#include <stdio.h>
int main()//1 1 2 3 5
{
int Fibonacci(int);
int a;
while(scanf("%d",&a)==1)
printf("%d\n",Fibonacci(a));
}
int Fibonacci(int x)
{
int i=1,y=1,p,e,h;
if(x>=0 && x<=2)
y=1;
else
{
h=(x-2)%3;
if((x-2)>=3)
for(e=1,i=1,y=1;e<=(x-2)/3;e++)
{
p=i+y;
i=y+p;
y=i+p;
}
if(h==1)
y=i+y;
if(h==2)
{
p=i+y;
y=y+p;
}
}
return y;
}
上一篇:信息学奥赛一本通(1188:菲波那契数列(2))


下一篇:paddlepaddle安装踩坑指南