题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
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;
}
}
