标签:
有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第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; }
标签:
原文地址:http://www.cnblogs.com/litao0505/p/5239463.html