题目简单描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
思路:
将所有牛分为四种状态的牛,牛只会在这四种状态中相互转换
状态转移:(i为第i年)
一年牛:a[i]=d[i] (三年牛变四年牛当年会生一年牛故都是i)
二年牛:b[i]=a[i-1] (二年牛只会由一年牛转移来)
三年牛:c[i]=b[i-1]
四年牛:d[i]=c[i-1]+d[i-1] (四年牛不会消失)
总牛数:
s[i]=a[i]+b[i]+c[i]+d[i]
s[i]=d[i]+a[i-1]+b[i-1]+c[i-1]+d[i-1]
s[i]-s[i-1]=c[i-1]+d[i-1]
s[i]-s[i-1]=b[i-2]+c[i-2]+d[i-2]
s[i]-s[i-1]=a[i-3]+b[i-3]+c[i-3]+d[i-3]
s[i]=s[i-1]+s[i-3]
代码:
#include<bits/stdc++.h>
using namespace std;
#define e "\n"
const int MN=100;
int s[MN];
int main()
{
s[1]=1,s[2]=2,s[3]=3;
for(int i=4;i<MN;++i){
s[i]=s[i-1]+s[i-3];
}
int n;
cin>>n;
while(n){
cout<<s[n]<<e;
cin>>n;
}
return 0;
}