package javaBlog;/*
古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:首先我们要明白题目的意思指的是每个月的兔子总对数;假设将兔子分为小中大三种,兔子从出生后三个月后每个月就会生出一对兔子,
那么我们假定第一个月的兔子为小兔子,第二个月为中兔子,第三个月之后就为大兔子,那么第一个月分别有1、0、0,第二个月分别为0、1、0,
第三个月分别为1、0、1,第四个月分别为,1、1、1,第五个月分别为2、1、2,第六个月分别为3、2、3,第七个月分别为5、3、5……
兔子总数分别为:1、1、2、3、5、8、13……

于是得出了一个规律,从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和,即为斐波那契数列。*/
public class RabbitNumber {private long rabbits = 1;private long lastSecondRabbits ,lastRabbits;/**
     * 遍历从第一个月到第n个月的兔子总数
     * */
    public void forEachMothsToRabbits(int moths){System.out.println(System.currentTimeMillis());for (int i = 1;i<= moths;i++) System.out.println("第"+i+"个月兔子数为"+getRabbits(i));System.out.println(System.currentTimeMillis());}/**
     * 获取当前月的兔子总数
     * */
    private long getRabbits(int moths){if (moths == 1 || moths==2 ) return rabbits=1;else if (moths == 3) return rabbits = 2;else{//初始化上一个月以及上两个月兔子数量
            if (lastRabbits == 0 && lastSecondRabbits ==0 ){lastSecondRabbits = getRabbits(moths-2);lastRabbits = getRabbits(moths-1);}//计算这一个返回的兔子数量
            rabbits= lastRabbits+lastSecondRabbits;/*让两个月的兔子数等于上一个月兔子数,让上个月等于这个月兔子数
            为了下一次计算(下月兔子数)更加高效快捷避免过冗余递归影响计算速率*/
            lastSecondRabbits = lastRabbits;lastRabbits = rabbits;return rabbits ;}}
}

java基础算法优化解决兔子数量以及拓展相关推荐

  1. Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...

  2. Java基础算法50题(一)

    文章目录 1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 2.判断101-200之间有多少个素数,并输出所有素 ...

  3. java基础算法题(入门题与简单题)

    题目来自lintcode,答案来自九章算术,将自己在lintcode上训练的一些简单算法题贴出来,作为知识的总结与整理.便于查看复习. 第一部分(入门级别,只做了开放的部分,大部分需要收费的VIP才有 ...

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

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

  5. Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

    查看所有50道基础算法题请看: Java的50道基础算法题 import java.util.ArrayList; import java.util.List; public class Detect ...

  6. Java基础算法题(07):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    查看所有50道基础算法题请看: Java的50道基础算法题 package Demo07Character_Count; import java.util.Scanner; public class ...

  7. Java基础算法题(18):两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三

    查看所有50道基础算法题请看: Java的50道基础算法题 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c ...

  8. java 基础算法教程ppt,基础排序算法(附加java实现)

    七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列的最后一个位置上,再 ...

  9. 50道JAVA基础算法编程题【内含分析、程序答案】【建议收藏】【建议收藏】【建议收藏】

    非常基础的题目,但是想学好Java它真的是基础,基础有多重要我就不再废话,重要的事情说三遍[建议收藏][建议收藏][建议收藏]. [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一 ...

最新文章

  1. 2022-2028年中国FNG硅胶行业市场研究及前瞻分析报告
  2. 码农新手白日梦:学最少的数学,编最靓的程
  3. conda 修改环境名称
  4. vue切换class_Vue点击切换Class变化,实现Active当前样式操作
  5. mysql128位整数_mysql的数据类型
  6. python输入一个人的名字_怎样用c语言做到输入一个人的名字才会输出一个心?
  7. 在Leangoo里怎么设置看板周期?
  8. H264学习方法历程资料
  9. Gartner:云安全的未来——中国的安全访问服务边缘架构
  10. Kubernetes中使用CronJob定时备份etcd集群数据
  11. 关于“就地颠倒句子里的词”面试题
  12. 数组——询问学号(洛谷 P3156)
  13. JavaScript事件流--事件冒泡、目标与事件捕获
  14. python和c++哪个好-C#、C++、Java、Python 选择哪个好?
  15. xp桌面上显示计算机名,巧妙还原WinXP快速启动栏的“显示桌面”图标
  16. 遥感数据存储格式 ----BSQ、 BIL、BIP
  17. 前端超炫表白干货(一)
  18. 为什么你的孩子拼命做题,成绩还总是上不去?
  19. 数值计算方法——乘幂法和反乘幂法
  20. c# 超时时间已到.在操作完成之前超时时间已过或服务器未响应,c#执行插入sql 时,报错:异常信息:超时时间已到。在操作完成之前超时时间已过或服务器未响应...

热门文章

  1. 聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index)
  2. JavaScript——异常处理
  3. 电冰箱在冬季不能正常启动的故障
  4. java浮雕矩阵,常见的图像特效处理算法(基于android)
  5. 基于STM32F103ZET6库函数按键输入实验
  6. 2024年QS世界大学排行榜!
  7. 官宣:3月27日的PMP考试,确定延期至6月、7月
  8. 基于Fragment的插件化
  9. redis-plus-plus使用说明
  10. java strtotime_js模仿php中strtotime()与date()函数实现方法