有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0n=0表示输入数据的结束,不做处理。
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
上面是题目要求
一开始,我把0当成是要处理的数,所以一直做不出来。
后来看了一下题目,一口老血喷了出来,
原来0是结束的标志。
以后做题要仔细看条件才行。。。。。
分割线
这是一条典型的递归题,
一层一层推过去。
这只是某斐数列经典例题的改进版。
由大于4开始,
每一个都递归到4年前的牛去。看代码就明白了:
按着这个思路走:总数量=该年生下的和前一年一共有多少只的总和
还有一个要注意的:
在进行输出时,要用数组存数据,不然你输入一个就会输出一个,这不符合要求
代码如下:
#includeint fun(int n);
int main()
{
int i,j=0;
int a[81];
do{
scanf("%d",&i);
if(i!=0)
{
a[j]=fun(i);
j++;
}
}while(i!=0);
j=j-1;
for(i=0;i<=j;i++)
printf("%d\n",a[i]);
return 0;
}
int fun (int n)
{
if(n<5)
return n;
else
return fun(n-3)+fun(n-1);
}
一开始做的时候,
脑子抽了,
将递归写成fun(n-4)+fun(n-1)
实际不是,
因为被第四个年头迷惑了,
母牛第二年生下小牛,该牛第五年生下儿子
也就是隔了三年。
被题目理解不到位,
要懂得根据output推结果