一本通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,int,long,数都,菲波,那契,include 来源: https://www.cnblogs.com/Kyriech-Francis/p/12364453.html