蓝桥杯入门训练Fibonacci数列 C语言
Fibonacci数列 C语言
问题描述
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。
首先,看到这个题目,笔者第一个想到的是递归法,但由于笔者学艺不精,时间长了具体怎么写给忘光了,于是看了蓝桥杯官网的锦囊
锦囊给的提示是
用数组保存?看起来是个办法,但仔细一想其实问题很多:
首先,题目中给的数据规模是 n<=1,000,000 如果用数组保存,那就得申请1000000这么大的数组空间,这无疑是一种空间上的浪费。
当然,也可以根据用户输入的n的值来申请空间
int n;scanf("%d",&n);int a[n];
但是,由题目可知,我们只需要打印出最后的结果就行了,也就是说,最终我们只会用到数组最后一个空间中的值,前面的空间依然是一种浪费。
So,这个方法Pass…
于是,笔者老老实实地用草稿纸将递归法回忆了起来 (因为懒,不想翻课本 ),写下以下这段超级简单地代码:
#include <stdio.h>int Fibonacci(int n)
{if(n==1||n==2)return 1;elsereturn (Fibonacci(n-1)+Fibonacci(n-2))%10007;
}int main(void)
{int n;while(n<1||n>1000000)scanf("%d",&n);printf("%d",Fibonacci(n));
}
编译运行毫无问题,于是信心满满地粘贴到了蓝桥杯评测系统…
结果。。。
0分!
0分!!
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;}
看上去,感觉确实厉害了不少 ,简洁精悍,于是我尝试将它粘贴上去。。。果然正确了。。。
然而身为小白的我百思不得其姐啊,怎么我的代码就不行嘞~~
纠结了好久之后,我发现了这个:
我的代码CPU占用率和内存使用远远大于正确的代码!仔细一想,递归其实和数组一样,确实占用了不少内存空间,而且也加大了计算量。
不过,本小(da)白也不知道是不是这个理,如果有大神看到这篇文章,欢迎指正!
蓝桥杯入门训练Fibonacci数列 C语言相关推荐
- 【c语言】蓝桥杯入门训练 Fibonacci数列
[问题描述] Fibonacci数列的递推公式为:Fn=F(n-1)+F(n-2),其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. [输入格式] 输 ...
- 蓝桥杯入门训练Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- 蓝桥杯 入门训练 Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- 入门训练 Fibonacci数列 c语言
入门训练 Fibonacci数列 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多 ...
- 蓝桥杯基础练习 Fibonacci数列 C语言实现
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除 ...
- 蓝桥杯练习题Java实现 入门训练 Fibonacci数列
蓝桥杯练习题Java实现 入门训练 Fibonacci数列 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,F ...
- 入门训练 Fibonacci数列-python实现
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大 ...
- 入门训练 Fibonacci数列
http://lx.lanqiao.org/problem.page?gpid=T4 入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacc ...
- 蓝桥杯 入门训练 序列求和
[蓝桥杯入门训练](BEGIN-2 序列求和) 问题描述 求1+2+3+-+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+-+n的值. 样例输入 4 样例 ...
最新文章
- http get post 请求
- 鸿蒙系统海外名称,新商标表明华为鸿蒙系统在海外或叫做“Harmony OS”
- [恢]hdu 2016
- linux安装mysql 5.6_linux 安装mysql5.6
- 数学家与诗人,都是这个世界上先知先觉的预言家
- hibernate中antlr对于hql的词法分析源码解析
- python十进制转化为二进制_十进制转化为二进制的Python 3.2 代码
- pandas后台导出excel_pandas导出Excel表格,银行卡号、身份证号无法正常显示的问题,该怎么解决?...
- 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
- 引用 DetachedCriteria
- (转载)make的-j命令(加速Linux程序编译)
- 转:Java中abstract和interface的区别
- VoIP服务器处理协议,多协议VoIP服务器的研究与实现
- 适合编程初学者的开源项目:小游戏2048(微信小程序版)
- 使用STM32F103CBT6自制ST LINK V2-1多功能烧录器
- 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔
- android word分页,控制分页
- 贝尔商道赚钱思维36道第01道:天地无所谓仁与不仁
- 【chrome插件】公众号后台,固定侧边栏,自动定位菜单位置。
- 网络掉包分析工具mtr