【华为练习题 】 长寿的兔子
来源:互联网 发布:数据录入员招聘58同城 编辑:程序博客网 时间:2024/04/26 14:42
【华为练习题 】 长寿的兔子
题目
从前有一对长寿的兔子,他们每个月生出一对小兔子,第一个月新生产的兔子两个月就长大了,在第三个月初开始生他们的下一代小兔子,这样一代一代的生下去,不考虑兔子的寿命,求第n个月出生多少对小兔子
简单示例:
比如输入1,第一个月出生的兔子只有一对,所以输出为1
比如输入2,第二个月出生的兔子只有一对,所以输出为1
比如输出为3,则该月份有两对兔子出生,则输出为2
要求:
实现以下接口:
输入一个正整数,表示第几个月,输出该月份生产出的小兔子的对数
调用者会保证:
输入的月份与生产的兔子数目都为unsigned int 能表达的数字
分析
非递归:将兔子分为大中小3类(大兔子:可以产小兔子,中兔子:成长1个月的小兔子,下个月会变成大兔子),每个月的大兔子数量为上个月的大兔子数量加上中兔子数量,中兔子数量为上个月小兔子数量,小兔子数量为上个月大兔子数量。
递归:某月出生的兔子数量等于大兔子数量,大兔子数量等于上个月的大兔子数量加上中兔子数量,而上个月的中兔子数量等于上上个月的小兔子数量,等于上上上个月的大兔子数量,于是得到递推式:
f(n) = f(n-1) + f(n-3) (n>=3)
解答
非递归方式
#include <iostream>using namespace std;unsigned rabbit(unsigned n){ unsigned big = 1, mid = 0, little = 0; while (n--) { unsigned tmp1 = big, tmp2 = mid, tmp3 = little; big = tmp1 + tmp2; mid = tmp3; little = tmp1; } return big;}int main(){ unsigned n; cin >> n; cout << rabbit(n) << endl; return 0;}
递归方式
#include <iostream>using namespace std;unsigned rabbit(unsigned n){ if (n <= 2) return 1; return rabbit(n-1) + rabbit(n-3);}int main(){ unsigned n; cin >> n; cout << rabbit(n) << endl; return 0;}
1 0
- 【华为练习题 】 长寿的兔子
- 华为OJ--求兔子的数量
- java练习题:兔子问题
- 华为上机练习题--大数字的运算
- 十大必吃的长寿食物
- 长寿的树
- 长寿的秘诀
- 长寿的秘诀
- 【华为oj】统计每个月的兔子总数
- 华为OJ:统计每个月兔子的总数
- 华为OJ(统计每个月兔子的总数)
- 华为OJ中级篇-统计每个月兔子的总数
- 华为oj 统计每个月兔子的总数
- 【华为OJ】【029-统计每个月兔子的总数】
- 华为OJ——统计每个月兔子的总数
- 华为OJ——统计每个月兔子的总数
- [华为OJ--C++]029-统计每个月兔子的总数
- 华为oj中级 统计每个月兔子的总数
- [图形学] 光线追踪中的数学方法
- 在tableview上添加悬停窗口
- Cadence 学习笔记 - Capture CIS 篇 (ERROR (ORCAP - 1228) )
- python中的range()和array()函数
- cocos2dx——自制动作。shake your body!
- 【华为练习题 】 长寿的兔子
- Properties集合的应用
- Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
- 关于栈区、堆区、全局区、常量区、代码区的总结
- Axis2与Spring集成发布
- qt quick 开发实战——qt 多文档编辑器
- 读书笔记-Linux C 编程从基础到实践-第二章 在Linux下进行C语言开发
- AngularJS中的双向数据绑定 ng-bind,ngshow,ng-hide,ng-class,ngAnimate
- SDUTACM 数据结构实验之排序四:寻找大富翁