有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
/*
有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
题目要求:
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0< n< 55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
Sample Input
2
4
5
0
Sample Output
2
4
分析:此题类似另一个有趣的古典数学问题:有一对小兔,从出生后第3个月起每个月都生一对小兔。
小兔长到第3个月后,每个月又生一对小兔。假设所有小兔都不死,问每个月的小兔总对数为多少?
这是一个典型的Fibonacci数列问题:
F1=1 (n=1)
F2=1 (n=2)
F3=F1+F2 (n>=3)
母牛头数也是一个有规律的数列形式,因此必须找到一个递推公式,经过分析
F1=1 (n=1)
F2=2 (n=2)
F3=3 (n>=3)
F4=F1+F3 (n>=4)
*/
#include<iostream>
using namespace std;
int main()
{
int n,i,f1=1,f2=2,f3=3; //f1,f2,f3表示连续三年的母牛数,n表示第几年
cin>>n;
while(n!=0)
{
if(n==1||n==2||n==3) //如果输入的年份为第1、2、3年
{ cout<<n<<endl;
cin>>n;
continue;
}
f1=1;
f2=2;
f3=3;
for(i=1;i<=(n-4)/3+1;i++) //从第4年开始进行递推
{
f1=f1+f3;
f2=f1+f2;
f3=f2+f3;
}
if(n%3==1)cout<<f1<<endl;
if(n%3==2)cout<<f2<<endl;
if(n%3==0)cout<<f3<<endl;
cin>>n;
}
return 0;
}