描述:
有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請編程實現在第 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;
}