题解 | #统计每个月兔子的总数#

统计每个月兔子的总数

https://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395

import java.util.*;
import java.util.stream.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    int yearCount = in.nextInt();
    // 方法 1 斐波那契数列
    // int[] a = new int[month];
    // a[0] = 1; a[1] = 1;
    // for (int i=2; i<month; i++) {
    //   a[i] = a[i-1] + a[i-2];
    // }
    // System.out.println(a[month-1]);

    // 方法 2 面向对象模拟
    List<Rabbit> list = new ArrayList<>();
    list.add((new Rabbit()));
    RabbitHome home = RabbitHome.newInstance(list);
    while (yearCount > 0) {
      home.plusYear();
      yearCount--;
    }
    System.out.println(home.countRabbit());

  }

  static class Rabbit {
    int year = 0;

    Rabbit birth() {
      return new Rabbit();
    }

    boolean canBirth() {
      return year >= 3;
    }

    void growth() {
      this.year++;
    }
  }

  static class RabbitHome {

    static RabbitHome home;
    List<Rabbit> rabbits;

    private RabbitHome(List<Rabbit> list) {
      this.rabbits = list;
    }

    public static RabbitHome newInstance(List<Rabbit> list) {
      if (home == null) {
        home = new RabbitHome(list);
      }
      return home;
    }

    void plusYear() {
      List<Rabbit> newRabbits = new ArrayList<>();
      rabbits.forEach(r -> {
        r.growth();
        if (r.canBirth()) {
          newRabbits.add(r.birth());
        }
      });
      // 新生兔宝也要成长
      newRabbits.forEach(Rabbit::growth);

      this.rabbits.addAll(newRabbits);
    }

    int countRabbit() {
      return this.rabbits.size();
    }
  }

}

全部评论

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务