另类解法(突发奇想):模拟兔子的繁殖过程,不使用递推式,不递归
注意:需要读懂题,例如:第一只兔子一二月不会生产(即满两个月才会生产),第三个月会生产一直兔子,第三个月过去那只小兔子也会满一个月。
/**
* 计算兔子的数量
*/
public class Test37 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int month = scanner.nextInt();
//1.初始时农场有一只年龄为0的兔子
ArrayList<Rabbit> farm = new ArrayList<>();
Rabbit rabbit = new Rabbit(0);
farm.add(rabbit);
//2.每过去一个月:在这一个月*里面*,满了两个月的兔子会生产,同时它们的年龄会增加
for (int i = 0; i < month; i++) {
int n = farm.size();
for (int j = 0; j < n; j++) {
Rabbit rabbit1 = farm.get(j);
if (rabbit1.getAge() >= 2) {
farm.add(new Rabbit(1));//这里是1不是0,需要注意。因为这个月过去了小兔子也满一个月了
}
rabbit1.setAge(rabbit1.getAge() + 1);
}
}
//得到兔子的总数
int number = farm.size();
System.out.println(number);
}
}
/**
* 兔子类
*/
static class Rabbit {
private int age;
public Rabbit(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
京公网安备 11010502036488号