母牛的故事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了母牛的故事相关的知识,希望对你有一定的参考价值。

有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第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;
} 

 

以上是关于母牛的故事的主要内容,如果未能解决你的问题,请参考以下文章

母牛的故事

母牛的故事

杭电2018母牛的故事

年轻母牛的故事

母牛的故事

Hdu 2018 母牛的故事