BEGIN-4_蓝桥杯_Fibonacci数列
问题描述
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数列的更多相关文章
- 蓝桥杯---波动数列(dp)(背包)(待解决)
问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减 ...
- 蓝桥杯BASIC-13 数列排序
问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输 ...
- BASIC-13_蓝桥杯_数列排序
示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 , j = ...
- BASIC-4_蓝桥杯_数列特征
示例代码: #include <stdio.h>#include <stdlib.h> int main(void){ int n = 0 ; int i = 0 , max ...
- [蓝桥杯] Fibonacci数列 入门
原题链接 import java.util.Scanner;//导入Scanner类 public class Main { public static void main(String[] args ...
- [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路
前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...
- 蓝桥杯-入门训练 :Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. ...
- 第八届蓝桥杯JavaB组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推 ...
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
随机推荐
- Git HEAD 意思详解 和版本回退
首先,Git必须知道当前版本是哪个版本,在git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版 ...
- 超级好用的C++万能头文件
#include<bits/stdc++.h>包含了目前c++所包含的所有头文件 对比: #include <iostream> #include <cstdio> ...
- 关于Java Logger类的使用问题 - 内存不释放
原文地址:http://www.ihuxu.com/p/236.html 说明:这是一个利用Java Logger类的示例,完成简单的日志记录功能.代码中有部分类库没有说明,但不影响阅读. 本人技 ...
- python查看文件的编码格式
pip install chardet 执行 import chardet f = open('a.doc',r) data = f.read() print chardet.detect(data) ...
- Redis Cluster(Redis集群)的搭建和使用
Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...
- SharePoint 设置Library中文档的默认打开方式
在SharePoint Library中的文档, 如word, excel等, 文档有两种打开方式, 一种是Viewer in Browser, 一种是Open in Client applicati ...
- 利用git向github中推送文件
/*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 如果对git不够熟悉的学者,可以参考:http://www.cnblogs.com/zengsf/p/75062 ...
- mysql-python安装时mysql_config not found
在安装 mysql-python时,会出现: sh: mysql_config: not found Traceback (most recent call last): File "s ...
- Spring整合struts的配置文件存放问题
只使用Spring的时候,我把applicationContext.xml是放在项目的src路径下的,这样使用ClassPathXmlApplicationContext很方便嘛 整合了struts之 ...
- poj-1239(递推关系)好难
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...