蓝桥杯每日一练之Fibonacci数列

Posted 静Yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯每日一练之Fibonacci数列相关的知识,希望对你有一定的参考价值。

💛作者主页:静Yu
🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者
💛社区地址:前端知识交流社区
🧡多种源码领取:各种福利

第十三届蓝桥杯大赛个人赛省赛比赛将于2022年4月9日(星期六)举办,趁现在寒假的时间抓紧时间备战一下。因为博主本人报名是C/C++组,所以更新所有内容都是C/C++相关知识。题目全部都是蓝桥杯官网题库真题。今天是备战刷题的第十三天。

题目:

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式:

输入包含一个整数n.

输出格式:

输出一行,包含一个整数,表示Fn除以10007的余数

样例输入:

10
样例输出:
55

样例输入:

22
样例输出:
7704

解题思路:

其实这道题目就是经典的递归例题斐波那切数列,我们用递归思想可以解题,但是运行超时只得了30分。另外一种方法就是迭代的思想,成功拿到满分。


完整代码:

//递归解法
#include<iostream>
using namespace std;
int fib(int n)
	if(n==1) return 1;
	if(n==2) return 1;
	return (fib(n-1)+fib(n-2))%10007;

int main()
	int n;
	cin>>n;
	cout<<fib(n);
	return 0;

//迭代
#include <iostream>
using namespace std;
int main()

	int n;
	cin>>n;
	long long a[n];
	a[0] = 1,a[1] = 1;
	for(int i=2;i<n;i++)
		a[i] = (a[i-2]+a[i-1])%10007;
	
	cout<<a[n-1]<<endl;
	return 0;
 

以上是关于蓝桥杯每日一练之Fibonacci数列的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯每日一练之数列排序

蓝桥杯每日一练之数列排序

蓝桥杯C/C++每日一练之数列特征

蓝桥杯C/C++每日一练之查找整数

蓝桥杯每日一练之序列求和

蓝桥杯每日一练之圆的面积