题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395
Java
一个只有母兔子的世界
方法一:没什么特色就是逻辑观察思考
思考发现, 第n月时 年龄为3个月及3个月以上大的兔子数目=(上个月的)年龄>=3g个月的兔子数目 +(上个月的)年龄为2个月的兔子数目 年龄为2个月的兔子数目=(上个月的)年龄为1个月的兔子数目 年龄为1个月的兔子数目=(本月的)年龄为3个月的兔子数目(它本月变为3岁立即就生了)
1月大兔 2月大兔 3月及以上大兔 第1月 1 0 0 第2月 0 1 0 第3月 1 0 1 第4月 1 1 1 第5月 2 1 2 第6月 3 2 3 第7月 5 3 5 第8月 8 5 8
代码如下:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int sum=sumRubbit(n); System.out.println(sum); } } public static int sumRubbit(int n){ int month1=0;//初始化设置的是2月的值,以便三月开始循环 int month2=1; int month3=0; int sum=0; if(n==1||n==2){ return 1; } for(int i=3;i<=n;i++){ month3=month3+month2; month2=month1; month1=month3; } sum=month1+month2+month3; return sum; } }
方法2:递归
函数要实现第n个月的兔子总数,它和之前的兔子数有什么关系呢,递归关系式怎么写呢?
发现:
第n个月的兔子总数=第n-1个月的兔子总数+第n个月里新生的兔子数(即年龄为1的兔子数) 即: 第n个月的兔子总数=第n-1个月的兔子总数+第n个月里年龄>=3的兔子数 第n个月的兔子总数=第n-1个月的兔子总数+(第n-1月里年龄为2的兔子+第n-1月里年龄>=3的兔数) 第n个月的兔子总数=第n-1个月的兔子总数+(第n-2月里年龄为1的兔子+第n-2月里年龄为2的兔子+第n-2月里年龄>=3兔) 第n个月的兔子总数=第n-1个月的兔子总数+第n-2个月的兔子总数
代码:
package niuke0409; import java.util.*; public class Rabbit { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int sum=sumRubbit(n); System.out.println(sum); } } public static int sumRubbit(int n){ int sum=0; if(n==1||n==2){ return 1; } sum=sumRubbit(n-1)+sumRubbit(n-2); return sum; } }