A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 十万一千 于 2014-10-21 14:57 编辑
  1. package com.hp.test;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. public class 兔子总数 {
  5.         // 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
  6.         // 小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  7.         public static void main(String[] args) {
  8.                 Integer afterMonth = 10;
  9.                 List<Rabbit2> rabbit2s = new ArrayList<Rabbit2>();
  10.                 // 兔子族群的老祖宗(rabbit2Ancestors)
  11.                 Rabbit2 rabbit2Ancestors = new Rabbit2(rabbit2s);
  12.                 rabbit2s.add(rabbit2Ancestors);
  13.                 while (afterMonth > 0) {
  14.                         afterMonth--;
  15.                         for (int i = 0; i < rabbit2s.size(); i++) {
  16.                                 rabbit2s.get(i).growUp();
  17.                         }
  18.                 }
  19.                 System.out.println(rabbit2Ancestors.getAge() + "年后,总共会有兔子" + rabbit2s.size() * 2 + "只。");
  20.         }
  21. }

  22. class Rabbit2 {
  23.         public Rabbit2(List<Rabbit2> rabbit2s) {
  24.                 this.rabbit2s = rabbit2s;
  25.         }

  26.         private List<Rabbit2> rabbit2s;

  27.         private Integer age = 0;

  28.         private boolean isSexualMaturity;

  29.         /* 兔子们都长大一岁了 */
  30.         public void growUp() {
  31.                 this.age++;
  32.                 this.setSexualMaturity();
  33.                 if (this.isSexualMaturity) {
  34.                         this.rabbit2s.add(new Rabbit2(this.rabbit2s));
  35.                 }
  36.         }

  37.         public List<Rabbit2> getRabbit2s() {
  38.                 return rabbit2s;
  39.         }

  40.         public Integer getAge() {
  41.                 return age;
  42.         }

  43.         public boolean isSexualMaturity() {
  44.                 return isSexualMaturity;
  45.         }

  46.         private void setSexualMaturity() {
  47.                 if (this.age >= 3) {
  48.                         this.isSexualMaturity = true;
  49.                 } else {
  50.                         this.isSexualMaturity = false;
  51.                 }
  52.         }
  53. }
复制代码
各位斑斑们有做过这个题目没,  想了半天 做出来了 一个版本,请高人指教。。。

PS:
若每对兔子每年 有1/10的概率同时死亡, 有1/4的概率不生育后代,请模拟每年兔子的数量。(每年新生,死亡,幸存的,没生育的分别)

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

5 个回复

倒序浏览
看起来很复杂,不就是斐波拉契数列吗?
回复 使用道具 举报
无尽落寞 发表于 2014-10-20 21:55
看起来很复杂,不就是斐波拉契数列吗?

什么是 斐波拉契数列 啊, 不太懂啊
回复 使用道具 举报
其实 private boolean isSexualMaturity;成员可以省略,growUp方法可以换成
  1. public void growUp() {
  2.                 this.age++;
  3.                 if ( this.age>=3) {
  4.                         this.rabbit2s.add(new Rabbit2(this.rabbit2s));
  5.                 }
  6.         }
复制代码
回复 使用道具 举报
哥们,很简单的菲波拉契数列问题,递归。
代码也很简单。

package com.itheima.bbs;

public class RabNum {
        public static void main(String[] args) {
                System.out.println("第1个月的兔子对数: 1");
                System.out.println("第2个月的兔子对数: 1");
                int f1 = 1, f2 = 1, mon = 10, f;

                for (int i = 3; i <= mon; i++) {
                        f = f2;
                        f2 = f1 + f2;
                        f1 = f;

                }
                System.out.println("第" + mon + "个月的兔子对数:" + f2);
        }
}
回复 使用道具 举报
肖建伟 发表于 2014-10-21 13:57
哥们,很简单的菲波拉契数列问题,递归。
代码也很简单。

如果我把题目稍微改动下。。。恩 比如    每对兔子每年 有1/10的概率同时死亡, 有1/4的概率不生育后代,请模拟每年兔子的数量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马