算法设计:斐波那契数列
2014-03-02 19:14
169 查看
问题描述:
如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月里,又能开始生1对小兔子,假定在不发生死亡的情况上,由1对初生的兔子开始,1年后能生出多少对兔子?
问题分析:
刚开始只有一对初生的兔子,一个月后,初生的兔子变成2个月大的兔子,此时,由于它还不能生小兔,因此总数仍为1;两个月时,原来两个月大的兔子长成三个月大的兔子,并且生下一个月大的小兔子,此时兔子总数为2;......这样一直推理下去,从初始状态开始,就会得到一个数列:1(初始),1,2,3,5,8,13,21,34,55,89,144,233。也就是斐波那契数列,它有个规律,从第三个数开始的每个数都是前两个数之和。
根据分析,可将开始的两个数设为一个数组。然后从第三个数开始,每个数都是前两个数相加的和,最后方可求得一年后生出的兔子总和。
代码实现:
运行结果:
如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月里,又能开始生1对小兔子,假定在不发生死亡的情况上,由1对初生的兔子开始,1年后能生出多少对兔子?
问题分析:
刚开始只有一对初生的兔子,一个月后,初生的兔子变成2个月大的兔子,此时,由于它还不能生小兔,因此总数仍为1;两个月时,原来两个月大的兔子长成三个月大的兔子,并且生下一个月大的小兔子,此时兔子总数为2;......这样一直推理下去,从初始状态开始,就会得到一个数列:1(初始),1,2,3,5,8,13,21,34,55,89,144,233。也就是斐波那契数列,它有个规律,从第三个数开始的每个数都是前两个数之和。
根据分析,可将开始的两个数设为一个数组。然后从第三个数开始,每个数都是前两个数相加的和,最后方可求得一年后生出的兔子总和。
代码实现:
#include <stdio.h> # define NUM 13 //斐波那契数列 int main(){ int i; long total[NUM]={1,1}; for(i=2;i<NUM;i++){ total[i]=total[i-1]+total[i-2]; } for(i=0;i<NUM;i++){ printf("%d月兔子总数为:%d\n",i,total[i]); } //getch(); return 0; }
运行结果:
相关文章推荐
- 关于斐波那契数列算法设计问题 --漫漫算法路 小结篇
- 软件设计核心----算法
- 【算法设计与分析】To the max
- 算法分析与设计之五大常用算法
- 【广告算法工程师入门 12】机制设计-单物品拍卖与私人价值模型
- 如何用不变式断言设计算法
- 高效算法设计_递归与分治(棋盘覆盖问题,循环日程表,巨人与鬼)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 算法设计课程总结1~2(渐进分析记号,复杂性比较,递归,分治)
- 海量数据处理算法设计
- 常用算法设计技术总结
- 常用算法设计方法
- 算法设计技巧
- 算法设计课程总结3(DP动态规划)
- 多人之间消息共享问题的算法设计
- 基于mindwave脑电波进行疲劳检测算法的设计(4)
- Anandkumar:高维学习概率隐性变量模型及张量算法的设计分析
- 常用算法设计方法之动态规划法
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 设计一种算法,打印八皇后在8*8棋盘上的各种摆法