java算法日常练习题--古典问题:兔子繁衍问题

题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问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的位置为这对兔子成长的月份.模型做出来后的逻辑操作可以按照实际情况进行模拟.每月进行累加.最后集合的长度就是兔子的组数.

猜你喜欢

转载自blog.csdn.net/xiaoai1994/article/details/82180204