原题链接:[递归]母牛的故事
解题思路:
可以设定四个变量分别代指不同年头的母牛。
程序里所使用的变量代表的意义:
a:一个年头的母牛;
b:二个年头的母牛;
c:三个年头的母牛;
d:四个及以上个年头的母牛。
第一年时d=1,其他的则为0。而之后的每一年,既已设四种年头的母牛数分别为a,b,c,d,则下一年四种年头的母牛数分别是:
一个年头的母牛:d+c;
二个年头的母牛:a;
三个年头的母牛:b;
四个及以上个年头的母牛:d+c。
以此为思路编写的代码如下:
递归法:
#include<stdio.h>
int cow(int a,int b,int c,int d,int n)
{
n--;
if(n==0)
{
printf("%d\n",a+b+c+d);
return 0;
}
cow(d+c,a,b,d+c,n);
}
int main(){
int n;
while(1)
{
scanf("%d",&n);
if(n==0) break;
cow(0,0,0,1,n);
}
}循环法:
#include<stdio.h>
int main(){
int n,a,b,c,d;
while (1)
{
a=b=c=0;
d=1;
scanf("%d",&n);
if(n==0) break;
while(--n!=0)
{
d=d+c;
c=b;
b=a;
a=d;
}
printf("%d\n",a+b+c+d);
}
}以上两种方法虽然方法不同,但思路是一样的。
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
还可以用数组做,关键是每循环一次,母牛的数目都要记录下来,然后根据输入的n的值,从这些数中提取出答案,代码如下: #include<stdio.h> int main() { int a[55]={1,1,2,3,4}; a[0]=1; a[1]=1; a[2]=2; a[3]=3; int n,i,j=0,m,p; int b[1000]={0};/*用于存放输入的n对应的结果*/ for(i=4;i<55;i++) a[i]=a[i-1]+a[i-3]; scanf("%d",&n); while(n!=0&&n<55) { m=a[n]; b[j]=m; j=j+1; p=j;/*记录输入次数*/ scanf("%d",&n); } for(p=0;p<j;p++) printf("%d\n",b[p]); return 0; }