1004题-[递归]母牛的故事(非递归解答)

做到这题的一想到要用递归头都大了但是想不用递归可能要简单点,但是人家让的是递归解答,所以不算正解。

如果只是想解答这题可以将牛分为四种,成熟牛,第三年大的,第二年大的,第一年大的。将这四种进行递推计算。

代码

  1. #include<stdio.h>
  2. int fun(int n)
  3. {
  4. int big,a1,a2,a3,c=1,ex;//定义四种牛
  5. while(c<=n)//用年份当循环条件进行循环
  6. {
  7. if(c==1)
  8. {
  9. a1=0;
  10. a2=0;
  11. a3=0;
  12. big=1;
  13. }
  14. else//在不是第一年的情况下,进行递推用第一年的牛推出第二年的牛,类似操作推出这年的牛的情况
  15. {
  16. big+=a1;
  17. a1=a2;
  18. a2=a3;
  19. a3=big;
  20. }
  21. c++;
  22. }
  23. return big+a1+a2+a3;//将牛的总数返回
  24. }
  25. int main()
  26. {
  27. int a;
  28. while(1)
  29. {
  30. scanf("%d",&a);
  31. if(a==0)
  32. break;
  33. else
  34. printf("%d\n",fun(a));
  35. }
  36. return 0;
  37. }
点赞(0)
 

9.9 分

4 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

Farggle 3年前 回复TA
哈哈哈哈 笑死 脑洞大开
5年前 回复TA
#include<stdio.h>
int mn(int n)
{
    if((n-3) > 0)
    return mn(n-1)+(n-3);
    else
      return n;
      
      
}
int main()
{
    int n = 0;
    int a[55] = {0};
    int b;
    do{scanf("%d",&a[n]);
        
    }while(a[n++]!=0);
    for(int i=0;i<n-1;i++)
    {
    b=mn(a[i]);
    printf("%d\n",b);
    }
    return 0;
}答案错误%50,是我那点没考虑到么,求解决
Odins 5年前 回复TA
@oo 虽然也能出结果,但是没有对程序多行输入的停留,输入一个值,直接就输出结果了
oo 5年前 回复TA
#include<stdio.h> 
int fun(int n)
{
int i,num;
int c1,c2,c3,c4;
c1=c2=c3=0;
c4=1;
if(n!=0)
{
	for(i=1;i<n;i++)
{
		c4+=c3;
	c3=c2;
	c2=c1;
	c1=c4;
}
}
num=c1+c2+c3+c4;
return (num);
}
int main()
{
int n;
scanf("%d",&n);	
printf("%d",fun(n));
return 0;
}