蓝桥入门训练(Python&&C/C++)---Fibonacci数列

  • 定位:蓝桥杯练习系统—入门训练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;
}
  • 总结:经典的题型和例子要铭记于心。
  • 感悟:虽说往事如烟,但曾经的经验和教训要铭记于心。
  • 归档:已归档。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值