题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395
#include <iostream>
using namespace std;
/*
* 斐波那契数列公式(递归):1 1 2 3 5 8 13 ,f(n) = f(n-1) + f(n-2), n > 2
* 思路: 当month<3,则输出;当month>=3,则f(n) = f(n-1) + f(n-2)
*/
int Fibonacci(int month)
{
if(month < 3) {
return 1;
} else {
int sum = Fibonacci(month-1) + Fibonacci(month-2);
return sum;
}
}
/*
* 迭代方法
* 思想:前三个月都是一个兔子,到第四个月才2个兔子.
* 输入月数month,第一个月firstMonthSum,第二个月secondMonthSum,第三个月thirdMonthSum ,
* thirdMonthSum=secondMonthSum+firstMonthSum; secondMonthSum =firstMonthSum;
* firstMonthSum = thirdMonthSum;
*/
int InteratorSum(int month)
{
int firstMonthSum = 1;
int secondMonthSum = 0;
int thirdMonthSum = 0;
// 前2个月都是一个兔子,到第3个月才2个兔子,每个3个月生一个兔子
for(int i = 2; i <= month; i++) {
thirdMonthSum = secondMonthSum + firstMonthSum;
secondMonthSum = firstMonthSum;
firstMonthSum = thirdMonthSum;
}
return thirdMonthSum;
}
int main()
{
int month = 0;
while(cin>>month) {
// cout<< Fibonacci(month) <<endl;
cout<< InteratorSum(month) <<endl;
}
return 0;
}