另类解法(突发奇想):模拟兔子的繁殖过程,不使用递推式,不递归
注意:需要读懂题,例如:第一只兔子一二月不会生产(即满两个月才会生产),第三个月会生产一直兔子,第三个月过去那只小兔子也会满一个月。
/** * 计算兔子的数量 */ 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; } } }