题目描述

这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。按此规律,假设没有兔子死亡,第一个月有一对刚出生的小兔子,问第n个月有多少对兔子?

输入

输入月数n(1<=n<=44)。

输出

输出第n个月有多少对兔子。

样例输入 Copy

3

样例输出 Copy

2

提示

本题是一个经典的递推入门题目: 用f(n)表示第n个月的兔子数目,则: f(n) = f(n-1) + 本月新生兔子数 而,本月新生兔子数 = f(n-2) (因为上上个月已存在的每只兔子,本月都会新生一只兔子) 所以,f(n) = f(n-1) + f(n-2) 这就是著名的Fibonacci数列,后一项等于前两项的和: 1 1 2 3 5 8…

解题方法

由题意知:本题符合Fibonacci数列,求第n个月有多少对兔子即求F(n)的值。
方法一:循环求解
方法二:递归求解
递归方程:
F(1) = 1
F(2) = 1
F(n) = F(n - 1) + F(n - 2)
方法三:动态规划

方法一:循环求解

 unsigned Odd_1 = 1;             //奇数月,这里辅助标记指向(表示)第一个月有一对兔子unsigned Even_2 = 1;            //偶数月,这里辅助标记指向(表示)第二个月有一对兔子if (ItemNumber == 1)cout << Odd_1;else if (ItemNumber == 2)cout << Even_2;else{for (int i = 3; i <= ItemNumber; i += 2){Odd_1 += Even_2;Even_2 += Odd_1;}if (ItemNumber % 2 == 1)cout << Odd_1;elsecout << Even_2;}

方法二:递归求解1

unsigned FibonacciRecu(unsigned n)
{if (n == 1 || n == 2)return 1;elsereturn FibonacciRecu(n - 1) + FibonacciRecu(n - 2);
}

方法三:动态规划

 FibonacciValue[0] = 0;       //因数组下标是从0开始的,所以为了将下标与月相对应,根据题意将FibonacciValue[0]存入0FibonacciValue[1] = 1;       //第一个月有一对兔子for (int i = 2; i <= ItemNumber; i++)FibonacciValue[i] = FibonacciValue[i - 1] + FibonacciValue[i - 2];cout << FibonacciValue[ItemNumber];

程序代码如下(使用C++)

#include<iostream>
#include<vector>using namespace std;int main()
{unsigned ItemNumber;cin >> ItemNumber;unsigned Odd_1 = 1;             //奇数月,这里辅助标记指向(表示)第一个月有一对兔子unsigned Even_2 = 1;            //偶数月,这里辅助标记指向(表示)第二个月有一对兔子if (ItemNumber == 1)cout << Odd_1;else if (ItemNumber == 2)cout << Even_2;else{for (int i = 3; i <= ItemNumber; i += 2){Odd_1 += Even_2;Even_2 += Odd_1;}if (ItemNumber % 2 == 1)cout << Odd_1;elsecout << Even_2;}/*vector<unsigned> FibonacciValue;FibonacciValue.push_back(0);       //FibonacciValue[0] = 0;FibonacciValue.push_back(1);       //FibonacciValue[1] = 1;for (unsigned i = 2; i <= ItemNumber; i++)FibonacciValue.push_back(FibonacciValue[i - 1] + FibonacciValue[i - 2]);     //FibonacciValue[i] = FibonacciValue[i - 1] + FibonacciValue[i - 2];cout << FibonacciValue[ItemNumber];*/return 0;
}

程序运行结果如下


  1. 本题使用递归求解会因时间超限而出错 ↩︎

1055: 兔子繁殖问题相关推荐

  1. 醉林疯的OJ 1055: 兔子繁殖问题

    1055: 兔子繁殖问题 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对 ...

  2. 【ZZULIOJ】1055: 兔子繁殖问题

    ZZULIOJ题解 1055: 兔子繁殖问题 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3 ...

  3. 1055: 兔子繁殖问题 ZZULIOJ

    1055: 兔子繁殖问题 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对 ...

  4. zzulioj.1055 兔子繁殖问题

    1055: 兔子繁殖问题 时间限制: 1 Sec  内存限制: 128 MB 提交: 23697  解决: 14697 [状态] [讨论版] [提交] [命题人:admin] 题目描述 这是一个有趣的 ...

  5. 1055: 兔子繁殖问题 Python

    1055: 兔子繁殖问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 30740 解决: 19451 [状态] [讨论版] [提交] [命题人:admin] 题目描述 这是一个有趣的古典 ...

  6. 1055: 兔子繁殖问题 C语言

    1055: 兔子繁殖问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 30740 解决: 19451 [状态] [讨论版] [提交] [命题人:admin] 题目描述 这是一个有趣的古典 ...

  7. ZZULIOJ 1055:兔子繁殖问题

    兔子繁殖问题 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规 ...

  8. ZZULIOJ 1055 兔子繁殖问题(C++)

    兔子数列问题 斐波那契数列,又称黄金分割数列,以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.-- 为什么f(n)=f( ...

  9. ZZULIOJ 1055兔子繁殖问题

    题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设没有兔 ...

  10. zzulioj 1055: 兔子繁殖问题

    题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设没有兔 ...

最新文章

  1. sqlite的速度_内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
  2. python数据库特殊字符转义_Python处理mysql特殊字符的问题
  3. 过去10年技术人员有哪些状态改变?
  4. Java学习笔记2、环境变量配置与初学者常见错误
  5. oracle 多个with as
  6. “黑科技”监控图像技术你知道吗?
  7. java8 stringbuilder_有了Java8的“+”真的可以不要StringBuilder了吗
  8. 闲谈: 测试报告的插入图片
  9. 【java】抽象类下有两个具体子类,子类下有两个实例
  10. 5.2.1 标准原子类型
  11. 一.对ThreadLocal的理解
  12. 基于Linux的系统的文件/文件夹的权限
  13. 生命计算机在线,抖音生命计算器
  14. Broadcom BCM94360系列网卡Linux(Ubuntu/Fedora)驱动安装总结
  15. mysql auto.cnf_MySQL之my.cnf配置
  16. AR游戏觉醒,或将成为手游未来独角兽
  17. Kali Linux简介
  18. 很短,很文艺,很唯美。这才是真正的英文经典
  19. 儿童玩具语音智能机器人如何配置联网
  20. java中的this

热门文章

  1. JAVA ImageIO图片处理后变色
  2. 浅析hybrid模式下地支付宝钱包和微信
  3. access查询设计sol视图_选择查询-在access中如何建立一个选择查询只查询一个信?在access 爱问知识人...
  4. numpy.max() , sum()
  5. 广东专升本C语言程序设计(完结)
  6. 复选框至少选择一项_如果没有设计师,您至少要选98种材料,学会35项工艺!...
  7. marlin固件烧录教程_i3型3D打印机制作详解――Marlin固件介绍
  8. 学大伟业2018-2019学年第二学期《自主招生集训课程》
  9. python爬财务数据_会计终于不用被老板催着做报表,现在95%的财务都在悄悄办这事了!...
  10. 业务日志告警如何做?