母牛的故事
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 65 Accepted Submission(s) : 41
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
每个输出占一行。
Sample Input
2 4 5 0
Sample Output
2 4 6
Author
Source
C语言程序设计练习(三)
计
143-1
巩圣跃
根据题意,先列出前几年的牛头数,试着找找规律:
第n年:
| n=1 | n=2 | n=3 | n=4 | n=5 | n=5 | n=6 | n=7 | n=8 |
F(n)头牛? | F1=1 | F2=2 | F3=3 | F4=4 | F5=6 | F6=9 | F7=13 | F8=19 | F9=28 |
在列出这个序列的过程中,应当能找出规律。
以n=6为例,fn=9头牛可以分解为6+3,其中6是上一年(第5年)的牛,3是新生的牛(因为第3年有3头牛,这3头在第6年各生一头牛)。
我们可以得出这样一个公式:fn=fn-1+fn-3
再理解一下,fn-1是前一年的牛,第n年仍然在,fn-3是前三年那一年的牛,但换句话说也就是第n年具有生育能力的牛,也就是第n年能生下的小牛数。
编程序,求解这个公式就行了。
当然,第1-3年的数目,需要直接给出。
#include<iostream>
using namespace std;
int main()
{
int f(int);
int a;
while(cin>>a&&a!=0)
{
cout<<f(a)<<endl;
}
return 0;
}
int f(int i)
{
int c;
if(i==1) c=1;
else if(i==2) c=2;
else if(i==3) c=3;
else if(i==4) c=4;
else c=f(i-1)+f(i-3);
return c;
}