蓝桥杯今日份练习

时间:2022-12-19 11:20:45

一、题目

相信小伙伴们都学过斐波那契数列,它是这样一个数列:1,1,3,5,8,13,21…………

用f(n)表示斐波那契数列的第n项,则有:f1=f2=1,fn=fn-1+fn-2(n>2).

输入一个n,求出 fn 对10的9次方+7取模结果。

输入格式:

输入一个整数n(1<=n<=10000)

输出格式:

输出fn对1000000007的值。

二、小技巧和注意事项

1、在解决斐波那契数列问题时,利用数组,我们可以"人为"忽略掉数组下标从0开始,我们定义时,就从下标1开始,跟数列相同

2、因为斐波那契额数列基本呈指数级增长,为了防止数值超过int类型,我们可以边加边取模,结果和最后整个取模是一样的(我称之为取模结合律

三、源码+注释

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;


int main()
{
int mod = 1e9 + 7;//1e9这个指数形式要牢记,e前e后都必须是整型!
int f[100005];
int n;
cin >> n;
f[1] = 1;
f[2] = 1;
//利用数组表示斐波那契数列的技巧!在解决斐波那契数列问题时,利用数组,我们可以"人为"忽略掉数组下标从0开始,我们定义时,就从下标1开始,跟数列相同
for (int i=3;i<=n;i++)
{
f[i] = (f[i - 1] + f[i - 2])%mod;//因为斐波那契额数列基本呈指数级增长,为了防止数值超过int类型,我们可以边加边取模,结果和最后整个取模是一样的(我称之为取模结合律)
}
cout << f[n] << endl;
return 0;
}

蓝桥杯今日份练习