兔子繁殖问题(考虑兔子会死亡的情况)–java实现

问题描述:

在一片广袤无垠的大草原上,生活一羣兔子;无需考虑性别,每只兔子每年年末都会生2只小兔子,这2只小兔子在第二年年末也会生2只小兔子;

兔子能活5年,5岁的兔子不能在那年生小兔子;假如第一年年中,草原上有10只未满1岁的兔子,他们在年末都会开始生小兔子,请问,第N年年中,草原上有多少只兔子?

思路整理:

1 首先需要找到这道题的规律

第一年:                            10——兔子的总数    10

第二年:                       10       20——兔子的总数30新出生的兔子  20

第三年:                   10       2060——兔子的总数90新出生的兔子  60

第四年:             10      20    60180——兔子的总数270新出生的兔子  180

第五年:        10     20     60     180      540                   ——兔子的总数810新出生的兔子  540

第六年:1020     60     1805401600——兔子的总数2400新出生的兔子  1600死亡的兔10

第七年:2060     18054016004760——兔子的总数7140新出生的兔子  4760死亡的兔20

。。。。。

2

A  找到规律后可以发现 这道题感觉像一颗二叉树,继续吧问题的规律总结出来。到了第六年的时候第一年的兔子会死掉。并且不会生育出新的兔子,就是说在第六年的时候没有第一年兔子的后代。

B 前五年的规律很好找 F(N)= F(N-1) * 3;之后的规律需要总结出看上图看可以明显的得出 第六年死去的兔子就是第一年出生的,第七年死亡的兔子就是第二年出生的所以每年新出生的兔子 = 这年所有的兔子总数的2/3递推公式可以得出

F(N)  = (F(N-1) – F(N-5)*2/3)  *3         当N>6时成立

3   是不是能使用递归的思路,这里可以类比动态规划的求解。

确定以下三点  【最优子结构】

【边界】

【状态转移方程】

程序实现

package algorithm;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Set;

public class Test {

public static Long count(int n, HashMap map){

if(n<1){

return 0l;

}

if(n==1){

return 10l;

}

if(n==2){

return 30l;

}

if(n==3){

return 90l;

}

if(n==4){

return 270l;

}

if(n==5){

return 810l;

}

if(n==6){

return 2400l;

}

if(map.containsKey(n)){

return map.get(n);

}

else{

Long value = (count(n-1,map)*3-count(n-5,map)*2);//前一年所有的兔子减去五年前新出生的兔子 再乘3

map.put( n, value);

return value;

}

}

public static void main(String[] args) {

HashMap map =new HashMap(); //使用Hashmap 哈希表保存已经算过的

System.out.println(count(6,map));

}

}

代码是已经使用HashMap 作为字典优化过的。

其中主要涉及到的面试的知识点就是逻辑思维能力,和 java中的一些大数字的处理比如我们常常使用的Long 类型

等等的小细节性的东西。

java兔子繁殖_兔子繁衍问题 (考虑死亡)相关推荐

  1. 我的世界java村民繁殖_我的世界:1.14版本刷新几率小的五种村庄,没有村民咋回事?...

    原标题:我的世界:1.14版本刷新几率小的五种村庄,没有村民咋回事? 在沙盒游戏我的世界中,官方已经开始更新Java版1.15快照内容,而有的玩家就连Java版1.14都还没有探索完毕,尤其是某些村庄 ...

  2. 我的世界java村民繁殖_教程/村民养殖 - Minecraft Wiki,最详细的官方我的世界百科...

    此条目的(部分)内容需要翻译. 你可以帮助我们来翻译此条目,但请勿使用机器翻译.   关于村民在村庄与掠夺前的养殖,请见" 简单来说,如果你想繁殖村民,你只需要在一片足够大的区域内放上三张床 ...

  3. 我的世界java村民繁殖_我的世界:Java19w08a更新,村民加强守卫,小狐狸背叛

    虽然这句话很绕口,其实意思很简单,那就是之前的隐身药水没有什么用,该被打还是被打.因为这个可是害惨了流浪商人,不过这次好了,流浪商人在喝了隐身药水之后就能安全度过晚上了. NO.3 皮革马铠 马铠是属 ...

  4. java递归方法编写兔子繁殖_2018-04-15 斐波那契数列(兔子繁殖数列)

    费波那契数列(兔子繁殖数列) 兔子在出生两个月后,就有繁殖能力,一对成年而有繁殖力的兔子每个月能生出一对小兔子来.假设一年以后所有兔子都不死,那么一对小兔子一年以后可以繁殖多少对兔子? 我们来分析一下 ...

  5. 多种方式解决兔子繁殖问题

    兔子繁殖问题: 兔子从出生的第三个月开始繁殖,此后每个月都会繁殖,且每次繁殖都为一对异性兔子. 在封闭环境中,有一对异性刚出生的兔子,不考虑死亡,求一年后有多少对兔子. //通过观察可以发现 //当前 ...

  6. java 兔子繁殖问题_兔子繁殖问题

    /*兔子繁殖问题. 设有一对新生的兔子,从第三个月开始他们每个月都生一对兔子,新生的兔子从第三个月开始又每个月生一对兔子. 按此规律,并假定兔子没有死亡,20个月后共有多少个兔子?要求编写为控制台程序 ...

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

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

  8. JAVA兔子繁衍_Java 编程经典案例之兔子繁殖迭代问题

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

  9. matlab兔子繁殖问题,斐波那契数列在《疯狂动物城》兔子繁衍中的应用

    摘    要: 计算思维的构建有助于帮助学生将实际问题转换为透明易懂的框架算法, 并借助计算机解决.以电影<疯狂动物城>中的兔子繁殖问题为例, 引出斐波那契数列, 引导学生将数学表达式转化 ...

最新文章

  1. adb 命令小集(转)
  2. 八种 WebSocket 框架的性能比较
  3. 【Linux】一步一步学Linux——dmesg命令(74)
  4. 苹果电脑上超级好用的双栏文件管理器Commander One PRO版推荐给大家!
  5. MTCNN-tensorflow源码解析-gen_landmark_aug_12.py;gen_imglist_pnet.py
  6. MySQL系列:数据库基本操作(1)
  7. Netty工作笔记0006---NIO的Buffer说明
  8. 网站移动端500错误_PC网站和移动端网站有什么差异?
  9. 什么是作用域链(源码解析)
  10. 目前人工智能技术趋势如何?
  11. 经典机器学习系列(十四)PAC-Learning
  12. 【linux】X Server / X Client / Window manager 的关系
  13. 4. gstimxv4l2src.c源码分析
  14. 【小技巧】利用matlab进行批量文件下载并解压
  15. 笔记本电脑热点手机无法连接解决方案
  16. MetaMask10.6.1点击切换本地网络LocalHost:8545没反应
  17. 【统计学习方法】第10章 隐马尔可夫模型
  18. 如何修改SnipeIT的部分设置
  19. 2021中国软件和信息技术服务竞争力百强
  20. after::和before::的用法

热门文章

  1. 怎么看电脑的hdmi是输出还是输入_怎么看电脑显示器有没有hdmi接口
  2. Domoticz添加实时天气信息显示
  3. LaTex(PART IV) 各级标题
  4. 区块链和博弈论(以下转载自网络)
  5. 古墓丽影:源起之战影评
  6. 翻译文章“AST 模块:用 Python 修改 Python 代码”---!!注意ironpathyon未实现此功能...
  7. Usage of API documented as @since 1.8+ less... (Ctrl+F1) Inspection info: This inspection finds all
  8. r语言 新增一列数字类型_R语言实战(2)——创建数据集【学习分享】
  9. 微信公众号数据2019_全国公众号总排名2019,全国微信公众号排名
  10. 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案