解题思路:母牛递归前面四年就是一头母牛每年生一头小牛,从第五年开始,就变成了前一年的母牛数加上新出生的小牛,很显然,前一年的母牛数就是f(n-1),而新生的小牛数是f(n-3),因为只有3牛以前的母牛会生小牛,这个纯靠个人理解,对于新手来说,难的是每行输入一个数,以0为程序的终止,最后一起输出的问题。
这个问题引用数组比较好解决,首先要用数组存放你输入的每一个数,最后输入0的时候跳出输入的循环,转到输出这个数组里的每一个数带入母牛递归问题的解,所以需要两个循环,一个循环用来存放输入的数,另一个循环用来输出数组里面存放的值代入母牛递归中的解,话不多说,看代码。
注意事项:对于新手来说要格外注意数组索引要改变的问题。
参考代码:
#include
int fun1(int a) //母牛递归问题求解的函数
{
int sum=0;
if (a<=4)
return a;
if (a>=5)
return fun1(a-1)+fun1(a-3);
}
//下面到输入输出格式问题了
int main()
{
int arr[55]; //因为题目要求,先定义一个长度55的数组,可以存放55个数
int i=0; //这个i与b都是用来当索引的
int b=0; //索引
while (scanf ("%d",&arr[i]),arr[i]!=0) //输入的不为0的数都存入数组中
{
i++; //i自加,代表存入数组的下一个地标
}
while (b<i) //输入0跳出上面循环后,进入输出将数组值代入fun1中的值,也就是母牛递归问题的解
{
printf ("%d\n",fun1(arr[b])); //先前已经定义了b=0,在此就是将数组中的第一个数字代入fun1
b++; //而后b自加,意味着将下一个数组中的值代入fun1
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复