解题思路:
可以设定四个变量分别代指不同年头的母牛。
程序里所使用的变量代表的意义:
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 人评分
还可以用数组做,关键是每循环一次,母牛的数目都要记录下来,然后根据输入的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; }
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:865 |
矩阵转置 (C语言代码)浏览:1566 |
【偶数求和】 (C++代码)浏览:788 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:565 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:567 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:673 |
打水问题 (C语言代码)浏览:1156 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:387 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:1001 |
用筛法求之N内的素数。 (C语言代码)浏览:685 |