题目描述
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
eg:
输入:
9
输出:
34
以下是本篇文章正文内容,下面案例可供参考
解题思路
由题意知:
兔子的总数 = 上月生出来的兔子 + 这月有能力生的兔子(各生一个)
上月生出来的兔子 (first
)
first = second;//这个月有能力生的兔子生出来的兔子,就是相对下个月来说,“上月生的兔子”
这月有能力生的兔子(second
)
second = count;//所有兔子这个月都有能力生
返回两者相加
代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
System.out.println(getTotalCount(n));
System.out.println(getTotalCount2(n));
}
}
/**
* 每日一题-统计每个月兔子的个数
* 迭代写法
* @param MonthCount 第几月
* @return 兔子个数
*/
private static int getTotalCount2(int MonthCount) {
if(MonthCount < 3){
return 1;
}
int first = 1;//表示上月生的兔子
int second = 1;//表示这个月有能力生的兔子
int count = 0;//记录兔子总数
//从第三个月起
for (int i = 2; i < MonthCount; i++) {
count = first + second;//上月生的兔子+这个月有能力生的兔子
//更新上月生的兔子、这个月有能力生的兔子
first = second;
second = count;
}
return count;
}
/**
* 每日一题-统计每个月兔子的个数
* 递归写法
* @param MonthCount 第几月
* @return 兔子个数
*/
public static int getTotalCount(int MonthCount) {
if(MonthCount == 1||MonthCount == 2){
return 1;
}
return getTotalCount(MonthCount-1)+getTotalCount(MonthCount-2);
}
}
注意
第三个月才会有生兔子情况,所有月份小于3时,兔子数为1