有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

来源:互联网 发布:php个人网盘源码 编辑:程序博客网 时间:2024/05/01 07:54

网上看到这个题目,直接看到答案,不是很理解,还是按照自己梳理了一遍。

首先,我先搞了一个二维数组,3个数字记录每个月状态是新生的兔子,2个月大的兔子,3个月大的兔子,

public static int test0() {int i = 0;int m = 20;int[][] a = new int[20][3];a[0][0] = 1;// 新出生的兔子a[0][1] = 0;// 2个月的兔子a[0][2] = 0;// 3个月的兔子for (int n = 1; n < m; n++) {a[n][0] = a[n - 1][1] + a[n - 1][2];// 刚出生的兔子,上个月状态是第二个月的兔子+第三个月的兔子a[n][1] = a[n - 1][0];// 状态是第二个月的兔子 = 上个月1个月的兔子a[n][2] = a[n - 1][1] + a[n - 1][2];// 状态是三个月的兔子=上个月2个月的兔子+上个月三个月的兔子System.err.println("第" + (n+1) + "个月的兔子为:" + (a[n][0] + a[n][1] + a[n][2]));}return i;}

此上算出来

第 1 月份,兔子的数量为: 1
第 2 月份,兔子的数量为: 1
第 3 月份,兔子的数量为: 2
第 4 月份,兔子的数量为: 3
第 5 月份,兔子的数量为: 5
第 6 月份,兔子的数量为: 8
第 7 月份,兔子的数量为: 13
第 8 月份,兔子的数量为: 21
第 9 月份,兔子的数量为: 34
第 10 月份,兔子的数量为: 55
第 11 月份,兔子的数量为: 89
第 12 月份,兔子的数量为: 144
第 13 月份,兔子的数量为: 233
第 14 月份,兔子的数量为: 377
第 15 月份,兔子的数量为: 610
第 16 月份,兔子的数量为: 987
第 17 月份,兔子的数量为: 1597
第 18 月份,兔子的数量为: 2584
第 19 月份,兔子的数量为: 4181
第 20 月份,兔子的数量为: 6765


发现第三个月等于第一个月+第二个月

依次内推,可以吧算法写成

/** * 这是分析数字结构的结果,等于前一个月+前2个月 */public static void test1() {for (int i = 1; i <= 20; i++) {int num = getNum(i);System.out.println("第 " + i + " 月份,兔子的数量为: " + num);}}/** * 获取前2个数字相加, *  * @param i * @return */public static int getNum(int i) {if ((i == 1) || (i == 2)) {return 1;} else {return getNum(i - 1) + getNum(i - 2);}}


如果吧3改成2,2个月就生的话,

/** * 如果第2个月就生,那么就是1,2,4,8,可以直接上个月数字*2 */public static int test2() {int i = 0;int m = 20;int[][] a = new int[20][2];a[0][0] = 1;// 新出生的兔子a[0][1] = 0;// 2个月的兔子for (int n = 1; n < m; n++) {a[n][0] = a[n - 1][0] + a[n - 1][1];// a[n][1] = a[n - 1][0] + a[n - 1][1];;// System.err.println("第" + (n+1) + "个月的兔子为:" + (a[n][0] + a[n][1] ));}return i;}

这样就是双倍放大。。。。。







阅读全文
0 0
原创粉丝点击