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语言相关推荐

  1. 【c语言】蓝桥杯入门训练 Fibonacci数列

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

  2. 蓝桥杯入门训练Fibonacci数列

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

  3. 蓝桥杯 入门训练 Fibonacci数列

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

  4. 入门训练 Fibonacci数列 c语言

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

  5. 蓝桥杯基础练习 Fibonacci数列 C语言实现

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除 ...

  6. 蓝桥杯练习题Java实现 入门训练 Fibonacci数列

    蓝桥杯练习题Java实现 入门训练 Fibonacci数列 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,F ...

  7. 入门训练 Fibonacci数列-python实现

    入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大 ...

  8. 入门训练 Fibonacci数列

    http://lx.lanqiao.org/problem.page?gpid=T4 入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacc ...

  9. 蓝桥杯 入门训练 序列求和

    [蓝桥杯入门训练](BEGIN-2 序列求和) 问题描述 求1+2+3+-+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+-+n的值. 样例输入 4 样例 ...

最新文章

  1. http get post 请求
  2. 鸿蒙系统海外名称,新商标表明华为鸿蒙系统在海外或叫做“Harmony OS”
  3. [恢]hdu 2016
  4. linux安装mysql 5.6_linux 安装mysql5.6
  5. 数学家与诗人,都是这个世界上先知先觉的预言家
  6. hibernate中antlr对于hql的词法分析源码解析
  7. python十进制转化为二进制_十进制转化为二进制的Python 3.2 代码
  8. pandas后台导出excel_pandas导出Excel表格,银行卡号、身份证号无法正常显示的问题,该怎么解决?...
  9. 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
  10. 引用 DetachedCriteria
  11. (转载)make的-j命令(加速Linux程序编译)
  12. 转:Java中abstract和interface的区别
  13. VoIP服务器处理协议,多协议VoIP服务器的研究与实现
  14. 适合编程初学者的开源项目:小游戏2048(微信小程序版)
  15. 使用STM32F103CBT6自制ST LINK V2-1多功能烧录器
  16. 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔
  17. android word分页,控制分页
  18. 贝尔商道赚钱思维36道第01道:天地无所谓仁与不仁
  19. 【chrome插件】公众号后台,固定侧边栏,自动定位菜单位置。
  20. 网络掉包分析工具mtr

热门文章

  1. 微软研究院Detour开发包之API拦截技术
  2. 2018年企业采购平台哪个好?供应平台哪个好?
  3. JQuery引用iCheck样式
  4. python i18n 国际化简单实现-easy_i18n
  5. 什么是hashCode?
  6. win10系统中如何显示在此处打开命令窗口
  7. 美团面试之Hr面,不会套路把我坑惨了......
  8. zed2i相机中imu内参的标定及外参标定
  9. 计算机组成原理之移码表示法
  10. cors数据类型_使用CORS:跨域两三事