Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)
来源:互联网 发布:国外便宜域名 编辑:程序博客网 时间:2024/05/03 11:38
偶然看到了关于这个数学问题,就在想怎么用面向对象的方式解决问题.小弟利用蹩脚的Java语言和刚学到的观察者模式,想到了一个小办法.大家有兴趣看看吧!
原题如下:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序:
// 周期对象,控制时间自动增长,被观察的对象class Clock extends Observable {private static Clock clock;public static int rabbitcount = 0; // 现有兔子数量public static Clock getInstance() { // 单例模式,大家公用一个时间if (clock == null) {clock = new Clock();}return clock;}public void run() { // 时间开始走动for (int i = 1; i <= 12; i++) { // 12个月this.setChanged();this.notifyObservers(i); // 唤醒观察者System.out.println("面向对象思想:第" + i + "个月的兔子数量是:" + rabbitcount);}}}class Rubbit implements Observer { // 兔子(观察者:观察时间)int birthMoth;public Rubbit(int birthMoth) { // 初始化兔子的出生时间this.birthMoth = birthMoth;}public void update(Observable o, Object month) {Integer now = (Integer) month;if (now - birthMoth >= 2) { // 如果兔子达到三岁就可以生出一对小兔子Clock.rabbitcount += 1; // 兔子的数量增加一对Clock.getInstance().addObserver(new Rubbit(now)); // 将小兔子变成观察者,并告诉它自己出生的时间}}}public class RubbitCount {// 数学思想public static void count() {int f1 = 1;int f2 = 1;int f = 0;int M = 12;System.out.println("普通数学思想:第1个月的兔子数量是:" + f2);System.out.println("普通数学思想:第2个月的兔子数量是:" + f2);for (int i = 3; i <= M; i++) {f = f2;f2 = f1 + f2;f1 = f;System.out.println("普通数学思想:第" + i + "个月的兔子数量是:" + f2);}}public static void main(String[] args) {// 面向对象设计思想----------Clock.getInstance().addObserver(new Rubbit(1));Clock.rabbitcount += 1;Clock.getInstance().run();// 数学思想count();}}
面向对象思想:第1个月的兔子数量是:1面向对象思想:第2个月的兔子数量是:1面向对象思想:第3个月的兔子数量是:2面向对象思想:第4个月的兔子数量是:3面向对象思想:第5个月的兔子数量是:5面向对象思想:第6个月的兔子数量是:8面向对象思想:第7个月的兔子数量是:13面向对象思想:第8个月的兔子数量是:21面向对象思想:第9个月的兔子数量是:34面向对象思想:第10个月的兔子数量是:55面向对象思想:第11个月的兔子数量是:89面向对象思想:第12个月的兔子数量是:144普通数学思想:第1个月的兔子数量是:1普通数学思想:第2个月的兔子数量是:1普通数学思想:第3个月的兔子数量是:2普通数学思想:第4个月的兔子数量是:3普通数学思想:第5个月的兔子数量是:5普通数学思想:第6个月的兔子数量是:8普通数学思想:第7个月的兔子数量是:13普通数学思想:第8个月的兔子数量是:21普通数学思想:第9个月的兔子数量是:34普通数学思想:第10个月的兔子数量是:55普通数学思想:第11个月的兔子数量是:89普通数学思想:第12个月的兔子数量是:144
0 0
- Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)
- 大兔子生小兔子问题
- java 兔子生小兔子代码
- 老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
- 算法---兔子生小兔子
- 斐波那契数列(生小兔子问题)
- 兔子生兔子的Java解决方式
- Fibonacci數列(用此数列可以解决兔子生娃的问题)
- 关于兔子问题(斐波那契数)的Java实现--采用面向对象的方式
- 大兔子和小兔子
- 大兔子,中兔子,小兔子
- 菲波拉契数列兔子繁殖问题
- 兔子吧, 第一个月一对, 三个月后开始生小兔子, 每月一对, 小兔子三个月后又生小兔子... ^_^
- Java兔子生兔子问题
- 古典小兔子问题
- 斐波那契数列(用Java解决兔子数目问题)
- 算法--兔子生兔子的问题(费氏数列)
- 菲波拉契数列问题——兔子繁殖
- HDU 1875 畅通工程再续(Kruskal + 并查集)
- qt学习笔记(3)Qt、opencv、vs2010本地读取图像、反转图像并显示
- Android媒体的一些使用总结
- HLG 菜鸟和大牛
- 桶排序
- Java面向对象方式(观察者模式)解决菲波拉契数列问题(兔子三岁后就可以生小兔子)
- SICP 读书笔记——第 一 章 构造过程抽象——第 3 节 用高阶函数做抽象
- vim基本配置
- dtplayer如何添加demuxer
- POJ1088(记忆化搜索)
- ubuntu下文件压缩/解压缩命令总结
- 子数组之和的最大值
- 解密QQ号——队列
- C++编写DLL的方法