1760:菲波那契数列(2)

学习笔记
1760:菲波那契数列(2)_第1张图片
一、题目分析

题目要求菲波那契数列中第a个数对1000取模的结果,那么一是要求得第a个菲波那契数的数值,二是对其取1000的模,另还需注意输入输出格式。

二、数据结构

一维数组的存储。

三、代码及算法说明

#include   
int d[1000000]={0}; 
int main()
{  
    d[1]=d[2]=1;  
	for(int i=3;i<=1000000;i++)
	d[i]=(d[i-1]+d[i-2])%1000;    //求菲波那契数对1000取模的结果并存储在数组里 
	int n,a;  
	scanf("%d",&n);               //输入测试组数 
	int b[n];  
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a);
		b[i]=d[a];                //将第a个结果存入数组 
	}
	for(int i=0;i<n;i++)
	printf("%d\n",b[i]);          //按序输出 
}

四、算法分析

最开始我用递归算法来计算菲波那契数列的数值,在简单测试几组数据成功后就提交了,但站内测试结果为超时,我才发现当a较大时无法运行出结果,于是我把递归改为了递推。

直接用for循环将1000000以内的菲波那契数对1000的取模按序存放在数组里,输入测试数据后,将对应的结果放入另一个数组,最后按要求按序输出即可。

注:Oler42wa是我的知乎账号

你可能感兴趣的:(1760:菲波那契数列(2))