码迷,mamicode.com
首页 > 其他好文 > 详细

母牛的故事

时间:2016-03-03 19:10:50      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!