描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第 n 年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数 n(0<n<55),n 的含义如题目中描述。
n=0 表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第 n年的时候母牛的数量。
每个输出占一行。
分析:
第n年 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … |
---|---|---|---|---|---|---|---|---|---|---|
牛的数量 | 1 | 2 | 3 | 4 | 6 | 9 | 13 | 19 | … |
第n年的牛数量=上一年的牛数量+三年前的牛数量
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int T[56];
int main(){
int n;//第n年
memset(T,0,56*sizeof(int));
T[1]=1;
T[2]=2;
T[3]=3;
T[4]=4;
int m=4;//T存储的牛到第几年了
cin>>n;
while(n!=0){
/**
* 牛的数量等于上一年牛的数量加上今年出生的牛的数量
今年出生的牛 的数量等于三年前牛的数量
*也就是T(n)=T(n-1)+T(n-4)
*第一年一头成年牛也就是T(1)=1,T(2)=2,T(3)=3,T(4)=4.
*
*/
if(n<5){
cout<<T[n]<<endl;
} else{
for(int i=m+1;i<=n;i++){
T[i]=T[i-1]+T[i-3];
}
m=n;
cout<<T[n]<<endl;
}
cin>>n;
}
return 0;
}