本帖最后由 十万一千 于 2014-10-21 14:57 编辑
- package com.hp.test;
- import java.util.ArrayList;
- import java.util.List;
- public class 兔子总数 {
- // 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
- // 小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- public static void main(String[] args) {
- Integer afterMonth = 10;
- List<Rabbit2> rabbit2s = new ArrayList<Rabbit2>();
- // 兔子族群的老祖宗(rabbit2Ancestors)
- Rabbit2 rabbit2Ancestors = new Rabbit2(rabbit2s);
- rabbit2s.add(rabbit2Ancestors);
- while (afterMonth > 0) {
- afterMonth--;
- for (int i = 0; i < rabbit2s.size(); i++) {
- rabbit2s.get(i).growUp();
- }
- }
- System.out.println(rabbit2Ancestors.getAge() + "年后,总共会有兔子" + rabbit2s.size() * 2 + "只。");
- }
- }
- class Rabbit2 {
- public Rabbit2(List<Rabbit2> rabbit2s) {
- this.rabbit2s = rabbit2s;
- }
- private List<Rabbit2> rabbit2s;
- private Integer age = 0;
- private boolean isSexualMaturity;
- /* 兔子们都长大一岁了 */
- public void growUp() {
- this.age++;
- this.setSexualMaturity();
- if (this.isSexualMaturity) {
- this.rabbit2s.add(new Rabbit2(this.rabbit2s));
- }
- }
- public List<Rabbit2> getRabbit2s() {
- return rabbit2s;
- }
- public Integer getAge() {
- return age;
- }
- public boolean isSexualMaturity() {
- return isSexualMaturity;
- }
- private void setSexualMaturity() {
- if (this.age >= 3) {
- this.isSexualMaturity = true;
- } else {
- this.isSexualMaturity = false;
- }
- }
- }
复制代码 各位斑斑们有做过这个题目没, 想了半天 做出来了 一个版本,请高人指教。。。
PS:
若每对兔子每年 有1/10的概率同时死亡, 有1/4的概率不生育后代,请模拟每年兔子的数量。(每年新生,死亡,幸存的,没生育的分别)
|