题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
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(); } } }