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