zoukankan      html  css  js  c++  java
  • 蓝桥杯 入门训练 Fibonacci数列

    问题描述

    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

    当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

    输入格式
    输入包含一个整数n。
    输出格式
    输出一行,包含一个整数,表示Fn除以10007的余数。

    说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

    样例输入
    10
    样例输出
    55
    样例输入
    22
    样例输出
    7704
    数据规模与约定
    1 <= n <= 1,000,000。
     
     
     
     
    拿到这个题时候感觉挺easy的,递归么,然后就写下一个简单的代码。
    #include<stdio.h>
    
    int Dg(int n){
        int s;
       if(n==1||n==2)  s=1;
        else s=Dg(n-1)+Dg(n-2);
        return s;
    }
    int main(){
        int n,s;
        scanf("%d",&n);
        s=Dg(n);
        printf("%d",s%10007);
        return 0;
        
    }

    提交后,果然判错了,毕竟是算法训练,这么简单的解法,其实自己也是有点怀疑的,然后再看看题目,才认识到好像得严格按照人家的说明来设计代码,百思后总感觉自己后来写的好像还是不符合,而且有种怪怪的感觉,于是乎,问问度娘吧,然后就发现了一个资源,看后真是佩服,简短而且强悍

    #include <stdio.h>
    int main()
    {
        unsigned long s=0,f1=1,f2=1,f3=1,n=0;
        scanf("%d",&n);
         
         if(n>2)
        for(s=3;s<=n;s++)
        {
             f3=(f2+f1)%10007;
             f1=f2;
             f2=f3;
         }
     
         printf("%d",f3);
         return 0;
     }
  • 相关阅读:
    连接池的配置与维护
    对面向对象的理解
    ActiveMQ重试机制
    activemq持久化的几种方式详解
    zookeeper写数据流程
    G1垃圾回收器
    REDIS哨兵模式和集群模式
    REDIS复制
    REDIS参数配置和运行状态
    slow-log 和bin-log相关参数介绍
  • 原文地址:https://www.cnblogs.com/zhangzimu/p/6158391.html
Copyright © 2011-2022 走看看