- 定位:蓝桥杯练习系统—入门训练BEGIN-4
- 原题:Fibonacci数列
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。
资源限制
时间限制:1.0s 内存限制:256.0MB - 属性:循环
- 难度:初级
- 独白:
可算是遇到一个像样点的题了。
经典的Fibonacci数列,他的变形及其思想的用法在各类竞赛和研究生考试的算法题里屡见身影。
这里只是他的原型,原型题还是简单的,注意题目所给的提示,边运算边取模。
关于C/C++,我这里也不多谈,我这边用的是while循环来做的。
关于Python,还是有几点语法要多说明一下的,首先Python的赋值形式和C/C++略有不同,然后Python语法里的for循环和C/C++有很大不同,他这里似乎是固定了i,i也不需要定义数据类型,可变形的是range后的n值,这里和C/C++有很大不同,一定要注意了!还有就是无论Python还是C/C++里面的while后面的
条件只有当其为0 时才为假,比如为-1时也为真。 - 代码:
Python:
while True:
try:
n=int(input())
f1,f2,f3 = 1,1,1
for i in range(n-2):
f3 = (f1+f2)%10007
f1,f2 = f2,f3
print(f3)
except :
break
while True:
try:
n=int(input())
f1,f2,f3 = 1,1,1
while (n-2) > 0:
f3 = (f1+f2)%10007
f1,f2 = f2,f3
n -= 1
print(f3)
except :
break
C/C++:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,f1,f2,f3;
while(scanf("%d",&n)!=EOF){
f1 = f2 = 1;
if(n <= 2){
printf("1");
}
else{
while(n >= 3){
f3 = (f1+f2)%10007;
f1 = f2;
f2 = f3;
n--;
}
printf("%d\n",f3);
}
}
return 0;
}
- 总结:经典的题型和例子要铭记于心。
- 感悟:虽说往事如烟,但曾经的经验和教训要铭记于心。
- 归档:已归档。