兔子产子
来源:互联网 发布:只有我知 杭州见面会 编辑:程序博客网 时间:2024/04/30 06:22
有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?
月数 小兔子对数 中兔子对数 老兔子对数 兔子总数 110012010131012411135212563238753513
用C语言来描述迭代公式即为:
问题分析
兔子数的规律,如下表所示:提示:不满1个月的兔子为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。可以看出,每个月的兔子总数依次为1, 1, 2, 3, 5, 8, 13…这就是Fibonacci数列。总结数列规律即从前两个月的兔子数可以推出第3个月的兔子数。
算法设计
该题是典型的迭代循环,即是一个不断用新值取代变量的旧值,然后由变量旧值递推出变量新值的过程。这种迭代与如下因素有关:初值、迭代公式、迭代次数。经过问题分析,算法可以描述为:用C语言来描述迭代公式即为:
fib = fib1 + fib2
其中 fib 为当前新求出的兔子数,fib1为前一个月的兔子数,fib2 中存放的是前两个月的兔子数,然后为下一次迭代做准备,进行如下的赋值 fib2=fib1,fibl=fib,要注意赋值的次序,迭代次数由循环变量控制,表示所求的月数。下面是完整的代码:
#include <stdio.h>int main(){ long fib1=1, fib2=1, fib; int i; printf("%12ld%12ld", fib1, fib2); /*输出第一个月和第二个月的兔子数*/ for(i=3; i<=30; i++) { fib = fib1 + fib2; /*迭代求出当前月份的兔子数*/ printf("%12ld", fib); /*输出当前月份兔子数*/ if(i % 4 == 0) printf("\n"); /*每行输出4个*/ fib2 = fib1; /*为下一次迭代作准备,求出新的fib2*/ fib1 = fib; /*求出新的fib1*/ } printf("\n"); return 0;}运行结果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040
阅读全文
0 0
- 兔子产子
- 兔子产子
- 兔子产子
- 兔子产子
- 兔子产子
- 兔子产子问题
- 兔子产子问题
- 兔子产子问题
- 兔子产子问题
- 递推:兔子产子
- 百练 3258 兔子产子
- 兔子产子与fibanacii序列
- 趣味程序(兔子产子)
- 百练_3258:兔子产子
- 兔子产子问题(斐波那契数列)
- 兔子产子——斐波那契(Fibonacci)数列
- Java算法--递推算法 求解兔子产子问题或斐波那契数列问题
- 【Java算法学习】斐波那契数列问题-兔子产子经典问题
- 手工自动重跑kettle报错Job
- Http接口的分类
- git一键部署代码到远程服务器
- netty入门学习(4)-LengthFieldPrepender和LengthFieldBasedFrameDecoder
- 572. Subtree of Another Tree
- 兔子产子
- 6月3日,每日20行。
- 《飞屋环游记》让心去旅行
- Java数组
- 判断一个数组序列为二叉树的后序遍历序列
- poj 1852
- 逆波兰表达式的产生及计算
- 安卓入门之"搭建Android的开发环境"
- 《华为机试在线训练》之计算字符个数