题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
该算法之我的思路
- 首先查找某年份母牛数和新增母牛数之间的关系,详细参考图片
根据规律我先计算某年份母牛数新增表,在根据母牛数新增表计算某年份母牛数表 - 我利用输入年份数时确定年份的最大值,在此基础上仅对上述的新增表和母牛数表生成一次即可完成该算法,这样节省了重复计算的时间。
算法展示
#include <iostream>
using namespace std;
int main()
{
int n[100],j=0;//定义输入变量:n年数组,n的个数j
cin>>n[j];
//输入n年数组并记录年份最大值max
int max = n[j];
while(n[j]){
j++;
cin>>n[j];
if(n[j]>max)max = n[j];
}
int years[100],i;//定义某年份对应母牛数表
years[0]=years[1]=years[2]=years[3]=1;//初始化某年份对应母牛数表的值
//生成某年份对应新增母牛数表
for( i = 4;i<max;i++)
{
years[i]=years[i-1]+years[i-3];
}
//生成某年份对应母牛数表(不是新增母牛数表)
for( i =1;i<max;i++)
{
years[i]=years[i]+years[i-1];
}
//根据年份母牛数生成表查找对应年份母牛数并输出
for( i = 0;i<j;i++)
{
cout<<years[n[i]-1]<<endl;
}
return 0;
}