/*兔子繁殖问题。

设有一对新生的兔子,从第三个月开始他们每个月都生一对兔子,新生的兔子从第三个月开始又每个月生一对兔子。

按此规律,并假定兔子没有死亡,20个月后共有多少个兔子?要求编写为控制台程序。*/

/*解题思路

斐波那契数列问题

f(1) = 1(第1个月有一对兔子)

f(2) = 1(第2个月还是一对兔子)

f(3) = 2(原来有一对兔子,第3个开始,每个月生一对兔子)

f(4) = 3(原来有两对兔子,有一对可以生育)

f(5) = 5(原来有3对兔子,第3个月出生的那对兔子也可以生育了,那么现在有两对兔子可以生育)

f(6) = 8(原来有5对兔子,第4个月出生的那对兔子也可以生育了,那么现在有3对兔子可以生育)

..............

由以上可以看出,第n个月兔子的对数为

f(n) = f(n - 1) + f(n - 2);

f(n-1)是上个月的兔子数量,是原来有的。

f(n-2)是可以生育的兔子数,即多出来的数量。第n-2个月开始后的第3个月是第n个月,此时第n-2个月时的兔子都可以生育了。

程序如下:*/

import java.util.*;

public class 兔子繁殖问题 {

// 方法一:采用斐波那契数递归思想

public static int f(int n) {

if (n == 1 || n == 2)

return 1;

else

return f(n - 1) + f(n - 2);

}

// 方法二:为了再提高执行效率,可以采用打表思想

public static int f[]=new int[1000];

public static int f2(int n) {

for (int i = 1; i < n; i++)

f[i] = i > 2 ? f[i - 2] + f[i - 1] : 1;

return f[n] = n > 2 ? f[n - 2] + f[n - 1] : 1;

}

// 方法三:为了节省空内存间,可采用迭代思想

static int f3(int n) {

int a, b, sum;

a = b = sum = 1;

if (n == 1 || n == 2)

return 1;

else {

for (int i = 3; i <= n; i++) {

sum = a + b;

a = b;

b = sum;

}

return sum;

}

}

// 方法四:这是蓝桥杯一填空题,模拟母牛生产过程,效率低的可怕,想吐槽一下

private int age;

public 兔子繁殖问题 afterYear() {

age++;

return age > 2 ? new 兔子繁殖问题() : null;

}

public static void f4(int n) {

List list = new ArrayList();

list.add(new 兔子繁殖问题());

for (int i = 0; i < n; i++) {

int cowCount = list.size();

for (int j = 0; j < cowCount; j++) {

兔子繁殖问题 rabbit = list.get(j).afterYear();

if (rabbit != null) {

list.get(j).afterYear();

list.add(rabbit);

}

}

}

System.out.println("第" + n + "个月有兔子" + list.size() + "只");

}

public static void main(String[] args) {

long start = System.currentTimeMillis();

for (int i = 1; i < 30; i++) {

// System.out.println("第" + i + "个月有兔子" + f(i) + "只");

System.out.println("第" + i + "个月有兔子" + f2(i) + "只");

// System.out.println("第" + i + "个月有兔子" + f3(i) + "只");

// f4(i);

}

double end = System.currentTimeMillis();

double sumTime = (end - start) / 1000.0;

System.out.println("执行时间为:" + sumTime + "秒");

}

}

运行结果

方法一:

第1个月有兔子1只

第2个月有兔子1只

第3个月有兔子2只

第4个月有兔子3只

第5个月有兔子5只

第6个月有兔子8只

第7个月有兔子13只

第8个月有兔子21只

第9个月有兔子34只

第10个月有兔子55只

第11个月有兔子89只

第12个月有兔子144只

第13个月有兔子233只

第14个月有兔子377只

第15个月有兔子610只

第16个月有兔子987只

第17个月有兔子1597只

第18个月有兔子2584只

第19个月有兔子4181只

第20个月有兔子6765只

第21个月有兔子10946只

第22个月有兔子17711只

第23个月有兔子28657只

第24个月有兔子46368只

第25个月有兔子75025只

第26个月有兔子121393只

第27个月有兔子196418只

第28个月有兔子317811只

第29个月有兔子514229只

执行时间为:0.009秒

方法二

第1个月有兔子1只

第2个月有兔子1只

第3个月有兔子2只

第4个月有兔子3只

第5个月有兔子5只

第6个月有兔子8只

第7个月有兔子13只

第8个月有兔子21只

第9个月有兔子34只

第10个月有兔子55只

第11个月有兔子89只

第12个月有兔子144只

第13个月有兔子233只

第14个月有兔子377只

第15个月有兔子610只

第16个月有兔子987只

第17个月有兔子1597只

第18个月有兔子2584只

第19个月有兔子4181只

第20个月有兔子6765只

第21个月有兔子10946只

第22个月有兔子17711只

第23个月有兔子28657只

第24个月有兔子46368只

第25个月有兔子75025只

第26个月有兔子121393只

第27个月有兔子196418只

第28个月有兔子317811只

第29个月有兔子514229只

执行时间为:0.002秒

方法三:

第1个月有兔子1只

第2个月有兔子1只

第3个月有兔子2只

第4个月有兔子3只

第5个月有兔子5只

第6个月有兔子8只

第7个月有兔子13只

第8个月有兔子21只

第9个月有兔子34只

第10个月有兔子55只

第11个月有兔子89只

第12个月有兔子144只

第13个月有兔子233只

第14个月有兔子377只

第15个月有兔子610只

第16个月有兔子987只

第17个月有兔子1597只

第18个月有兔子2584只

第19个月有兔子4181只

第20个月有兔子6765只

第21个月有兔子10946只

第22个月有兔子17711只

第23个月有兔子28657只

第24个月有兔子46368只

第25个月有兔子75025只

第26个月有兔子121393只

第27个月有兔子196418只

第28个月有兔子317811只

第29个月有兔子514229只

执行时间为:0.002秒

方法四:

第1个月有兔子1只

第2个月有兔子1只

第3个月有兔子2只

第4个月有兔子3只

第5个月有兔子5只

第6个月有兔子8只

第7个月有兔子13只

第8个月有兔子21只

第9个月有兔子34只

第10个月有兔子55只

第11个月有兔子89只

第12个月有兔子144只

第13个月有兔子233只

第14个月有兔子377只

第15个月有兔子610只

第16个月有兔子987只

第17个月有兔子1597只

第18个月有兔子2584只

第19个月有兔子4181只

第20个月有兔子6765只

第21个月有兔子10946只

第22个月有兔子17711只

第23个月有兔子28657只

第24个月有兔子46368只

第25个月有兔子75025只

第26个月有兔子121393只

第27个月有兔子196418只

第28个月有兔子317811只

第29个月有兔子514229只

执行时间为:0.157秒

java 兔子繁殖问题_兔子繁殖问题相关推荐

  1. java兔子问题 递归_兔子问题 —— 递归的应用

    兔子问题.递归 public class Test { /** * 兔子问题 * 斐波那契数列 */ @org.junit.Test public void test2() { int m = 5; ...

  2. python生兔子问题(递归算法)_兔子问题python解决方法

    兔子问题 Python 解决方法 题目 : 有一对兔子, 从出生后第 3 个月起每个月都生一对兔子, 小兔子长到第三月后每个月 又生一对兔子,假如兔子都不死,问每个月兔子总数为多少 ? 这就是典型的斐 ...

  3. java兔子繁殖_兔子繁衍问题 (考虑死亡)

    兔子繁殖问题(考虑兔子会死亡的情况)–java实现 问题描述: 在一片广袤无垠的大草原上,生活一羣兔子:无需考虑性别,每只兔子每年年末都会生2只小兔子,这2只小兔子在第二年年末也会生2只小兔子: 兔子 ...

  4. java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...

    01:兔子繁殖问题 Java练习,第一道就是这道题,早有耳闻,看好多答案就是直接摆上来一个斐波那契数列就完了〒▽〒,于是自己就写了一个思考过程,仅供自己将来复习吧~ 一.问题概述 题目:古典问题:有一 ...

  5. 问题 Q: 5.18 兔子繁殖(2级)假设一对兔子(一雌一雄)每个月可繁殖出一对小兔子来,并且所有的兔子都不死,这样从第一个月开始在笼中圈养一对有繁殖能力的小兔子,那么month个月可以繁殖多少对兔子

    问题 Q: 5.18 兔子繁殖(2级) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2284 解决: 1904 [提交] [状态] [讨论版] [命题人:lip] 题目描述 一般的,兔子 ...

  6. 兔子繁殖问题,兔子有寿命限制

    ** 兔子繁殖问题,兔子有寿命限制 ** javaSE初学,第一次看到兔子繁殖问题,考虑到兔子有寿命限制后的代码实现 苦思冥想,用数组来实现. 还请业内大佬给出优化思路. public static ...

  7. 有一对雌雄兔子,每两个月就繁殖一对雌雄兔子。问n个月后共有多少对兔子?试用递归方法编写程序。

    有一对雌雄兔子,每两个月就繁殖一对雌雄兔子.问n个月后共有多少对兔子?试用递归方法编写程序. public class homework {public static int 繁殖(int n, in ...

  8. Java经典算法题目(兔子题)及题目分析

    Java经典兔子问题 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每个月的兔子总 ...

  9. Java 实现 蓝桥杯 生兔子问题

    生兔子问题 有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子.假如兔子都不死,计算第十个月兔子的总数? 分析: 四个月开始生兔子,则:F(N) = f(n-1) ...

最新文章

  1. Confluence 6 数据库表-空间(Spaces)
  2. Python排序dict之list数组
  3. spring cloud 学习之 服务注册和发现(Eureka)
  4. RMAN 备份SHELL
  5. 专科java程序设计试卷_java程序设计试卷(含答案)
  6. React 是怎样炼成的
  7. php的filter input,php中filter_input函数用法分析
  8. 用爬虫分析互联网大数据行业薪资情况
  9. 【数字信号调制】基于matlab多进制数字相位调制(4PSK)【含Matlab源码 1001期】
  10. ZYNQ7020 FPGA 如何生成从Flash和SD卡启动的镜像文件
  11. 单片机 矩阵式按键
  12. windows 无法停止ics_Windows10系统不能启动ICS服务致无法连接WiFi热点的三种解决方法...
  13. 微信小程序 scroll-view详解
  14. 【CF37E】 Trial for Chief
  15. win7计算机无法连接投影仪,笔记本win7系统连接投影仪显示没信号如何解决?
  16. 全国计算机二级考试报名入口河南,计算机等级考试报名入口河南(英语四级报名官网入口)...
  17. php工程师 英文,开发工程师的英文怎么说
  18. Windows 8 傻瓜式安装教程
  19. Apache Log4j2远程代码执行漏洞(CVE-2021-44228)
  20. 今日头条——校招在线编程题《字典序》

热门文章

  1. 【Android系统】虚拟按键 平板设备中重叠的问题
  2. java实现图片上传后裁剪,把白色背景变成透明图(电子印章)
  3. excel如何晒出重复数据_怎么筛选出excel中重复数据
  4. AXI中READY与VALID之间握手关系
  5. docker-compose实现滚动更新
  6. WARNING: too many parse errors
  7. python求个位十位百位_Js 分别取一个数的百位,十位,个位
  8. 0003 渗透测试标准
  9. 解决SELECT list is not in GROUP BY clause and contains nonaggregated column..
  10. IDEA使用database时,连接MySQL后schemas不显示数据库名的情况