题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数
分析:
这是个经典的涉及算法问题.我们可以先计算下这个衍生数列的排列:0、1、1、2、3、5、8、13、21、34...
传统的解决办法是找到数列的规律:S(n)=S(n-1)+S(n-2) (菲波那切数列)
但是对于很多算法基础薄弱的新人来说,这个规律可能并不是很好摸索的.因此我们需要使用基础的java知识对这个现象进行还原
首先我们看全部的代码:
public class Test01 {
public static void main(String[] args) {
int[] rabbitNum = { 1, 1 };
ArrayList<int[]> totalNumber = new ArrayList<>();
totalNumber.add(rabbitNum);
System.out.println("请输入您要计算的月份");
Scanner sc = new Scanner(System.in);
int nextInt = sc.nextInt();
int i = 0;
int flag = 0;
while (i < nextInt) {
for (int[] entry : totalNumber) {
if (entry[1] >= 3) {
flag += 1;
}
entry[1] = entry[1] + 1;
}
for (int j = 0; j < flag; j++) {
totalNumber.add(new int[] { 1, 2 });
}
flag = 0;
i++;
}
System.out.println("兔子的总数为:" + totalNumber.size());
}
}
这个实现方式的思路为:首先用一个数组模拟了兔子.索引为0的位置表示一组兔子.索引为1的位置为这对兔子成长的月份.模型做出来后的逻辑操作可以按照实际情况进行模拟.每月进行累加.最后集合的长度就是兔子的组数.