问题描述
Fibonacci数列的递推公式为:Fn=Fn-+Fn-,其中F1=F2=。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 样例输入 样例输出 样例输入 样例输出 数据规模与约定
<= n <= ,,。

使用递归来计算数列的值

在做题时出现的错:

1.使用递归返回结果的方式计算Fn的值,再做取余运算,

int diui(int n)

{

  if (n >= 1 && n <= 2)

  {return 1;//F1=F2=1}

  return digui(n - 1) + digui(n - 2);
}

  结果->当n值大过某值时,计算时间>1s,不合要求

  (原因:当数值过大时,由于递归的分支也大,每条分支结果必须等待上一条完成才能进行,所以缓慢)

2.使用递归计算值,结果存放在数组中(Fn-2放在arr[0],Fn-1放在arr[1],Fn放在arr[n]),然后取出Fn做取余运算

  void digui(int n,int arr[])

{  

  if (n >= 1 && n <= 2)

  {arr[3] = arr[n];}

  if (n > 2)
  {
  digui(n - 1,arr);
  arr[3] = (arr[1] + arr[2]);
  arr[1] = arr[2];
  arr[2] = arr[3];
  }
  return ;
}

  结果->当n值大过某值时,取出Fn做取余运算数据会异常

  (原因:当n达到一定值后会溢出,这时再做取余自然就出错了)

3.使用递归计算值,结果Fn做取余运算后存放在数组中(Fn-2放在arr[0],Fn-1放在arr[1],Fn%余数放在arr[n])

  void digui(int n,int arr[])

{  

  if (n >= 1 && n <= 2)

  {arr[3] = arr[n];}

  if (n > 2)
  {
  digui(n - 1,arr);
  arr[3] = (arr[1] + arr[2])%N;
  arr[1] = arr[2];
  arr[2] = arr[3];
  }
  return ;
}

  结果->正确,时间及内存消耗均满足要求

  (原因:由于每次计算结果Fn-1和Fn-2都存放在数组中,当计算Fn时直接调用,并做取余后放入数组中,避免Fn的溢出)

BEGIN-4_蓝桥杯_Fibonacci数列的更多相关文章

  1. 蓝桥杯---波动数列(dp)(背包)(待解决)

    问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减 ...

  2. 蓝桥杯BASIC-13 数列排序

    问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输 ...

  3. BASIC-13_蓝桥杯_数列排序

    示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 , j = ...

  4. BASIC-4_蓝桥杯_数列特征

    示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 ,  max ...

  5. [蓝桥杯] Fibonacci数列 入门

    原题链接 import java.util.Scanner;//导入Scanner类 public class Main { public static void main(String[] args ...

  6. [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路

    前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...

  7. 蓝桥杯-入门训练 :Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. ...

  8. 第八届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推 ...

  9. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

随机推荐

  1. 我的一起开源网 www.17ky.net上线了

    .net开源生态的落后,使得.net开发人员所拥有的开源资源比其他语言的开发者少了很多,这也使得笔者很早之前就喜欢收集各种开源项目,经常会去逛codeplex,开源中国社区等网站,同时也喜欢在自己或公 ...

  2. XE里, TStringField 还是 ansi的

    { TStringField } TStringField = class(TField) private FFixedChar: Boolean; FTransliterate: Boolean; ...

  3. 插件PageHelper实现分页查询

    一,需求: CommonQuery--PyQueryBean PyQueryBean:鹏飞历史记录查询,以往哪些人对征信进行了查询.CommonQuery:查询条件:根据查询人(umName).被查询 ...

  4. 使用MySQLTuner-perl对MySQL进行优化

    项目地址https://github.com/major/MySQLTuner-perl.git 抄一把说明,不翻译了,累-- MySQLTuner is a script written in Pe ...

  5. nodejs 安装出错总结

    1.npm无法安装模块,重新安装nodejs之前要 删除node下的文件(主要是npm包,不然安装是徒劳) 2.npm config list -l 查看git配置 3. Downloading bi ...

  6. Guided Image Filtering

    在图像滤波中,人们最希望的就是可以将图像中的噪声过滤掉的同时,能够让边缘尽可能的保持.噪声属于高频信号,而边缘其实也是一种高频信号,所以一般的滤波器,比如高斯模糊,均值模糊,都是一种低通滤波器,能够将 ...

  7. Jenkins自动化部署代码

    通过jenkins自动化部署项目代码可以大幅度节省打包上传部署的时间,提高开发测试的工作效率 ========== 完美的分割线 =========== 1.Jenkins是什么 1)Jenkins是 ...

  8. SIM800C Couldn't pair with xxx because of an incorrect PIN or passkey

    /******************************************************************************* * SIM800C Couldn't ...

  9. adb安装启动Touch校正软件

    /********************************************************************************* * adb安装启动Touch校正软 ...

  10. 51Nod 1058: N的阶乘的长度(斯特林公式)

    1058 N的阶乘的长度  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Inp ...