题目是这样的:
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
生牛总数就是三年前所有牛的总数,一头牛只能一下生一头,且有三年延迟,加上去年所有牛的数量。
加入一头牛一次能生两头牛,显然就是三年前总数的两倍,因为三年前的所有牛都可以在今年生小牛,且一次生两只。
这个逻辑是完备的,每一年的数量就是继承去年的数量和新产生的数量,这可以类比到生产产品,总产品数就是以前所有产品加上新生产的产品数量。
要注意的是题目中给出的样例,第一年是一头牛,默认母牛从第二年开始生产 ,因此f(1)=1
这道题我给出的是用循环完成递推式,比较好理解。
#include<iostream>
using namespace std;
const int N = 55;
int main(){
int f[N];
int n;
cout<<"请输入总共过去多少年:";
cin>>n;
f[0] = 1;
f[1] = 2;
f[2] = 3;
f[3] = 4;
for(int i = 3; i < n; i++){
f[i] = f[i-1] + f[i-3];
}
cout<<"经过"<<n<<"年总共有"<<f[n-1]<<"头母牛。"<<endl;
}