菲波那契数列(2024.3三级)

题目

菲波那契数列是指这样的数列:数列的第一个和第二 个数都为1, 接下来每个数都等于前面2个数之和。给出一 个正整数a,要求菲波那契数列中第a个数对10000取模的结果是多少。
时间限制: 1000
内存限制: 65536


输入

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


输出

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


样例输入

4
5
2
19
1

样例输出

5
1
181
1

解题思路

首先输入头文件,使用<bits/stdc++.h>万能头文件,当然,这道题不难,可以直接使用<iostream>,使用命名空间,调用主函数。

#include<bits/stdc++.h>
using namespace std;
int main()

根据题目要求,输入一个n,表示要输入n个数字,于是定义int n,并输入cin>>n

int n;
cin>>n;

作者在这里选用输入一个判断一个的方式,如果有糕手就用一次性的办法,或者自定义函数什么的都是很不戳的选择。如果采用作者的方法,可以用while循环n次,直接写成while(n--),或者使用for(int i=0;i<n;i++)也是可以的。因为选择在循环内一个一个输入,所以只定义一个a,以及一个sum数组,来存放部分斐波拉契数列。cin>>a来输入,然后由于斐波拉契数列的第一个数师1,第二个数也是1,所以赋值给sum[1]=1;sum[2]=1;

int a,sum[1001];
cin>>a;
sum[1]=1;
sum[2]=1;

接着循环,这里选择for循环更好,定义循环变量i从3开始,因为刚刚已经给sum[1]和sum[2]赋过值了。从3到a,并且逐个递增,写成for(int i=3;i<=a;i++)由于斐波拉契数列中,其中一个数是前一个数和前一个数的前一个数相加而成(除了第一个)所以sum[i]的“前一个”就写成sum[i-1],它的前一个的前一个就是sum[i-2],两者相加就等于了sum[i]。然后在循环内部输出这里的第a个数——sum[a]。成品如下:

代码展示

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	while(n--){
		int a,sum[1001];
		cin>>a;
		sum[1]=1;
		sum[2]=1;
		for(int i=3;i<=a;i++)
			sum[i]=sum[i-1]+sum[i-2];
		cout<<sum[a]<<endl;
	}	
	return 0;
}	

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值