1.有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
前0-n年个数分别为
0 1 2 3 4 5 6 (年)
1 1 2 3 4 6 9 13 19
可以看出规律f[n]=f[n-1]+f[n-3];
题解:
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int n;
long long f[1000];
f[0]=1;
f[1]=1;
f[2]=2;
f[3]=3;
for(int i=4;i<=60;i++){
f[i]=f[i-1]+f[i-3];
}
while(cin>>n&&n!=0){
cout<<f[n]<<endl;
}
return 0;
}
2.有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第四个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输 出 24 个月内,每个月的兔子总数为多少)
不难看出公式为f[n]=f[n-1]+f[n-2];
题解:
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int n;
long long f[1000];
f[0]=1;
f[1]=1;
f[2]=2;
for(int i=3;i<=24;i++){
f[i]=f[i-1]+f[i-2];
}
while(cin>>n&&n!=0){
cout<<f[n]<<endl;
}
return 0;
}
那么上面的n个月、年起小生物可以再生怎么求解数量呢,我认为是这样
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int n,m;
long long f[1000];
cin>>m;
for(int i=0;i<=m;i++){
f[i]=i;
}
for(int i=m+1; i<=24; i++)
{
f[i]=f[i-1]+f[i-m+1];
}
while(cin>>n&&n!=0)
{
cout<<f[n]<<endl;
}
return 0;
}