解题思路:
首先提取题目主干信息:每年年初生一头母牛 每次生的牛每四年可以生一头牛;
n代表年数 f[n]代表牛数
n=1 f[1]=1; //第一年有一头牛这头牛是最开始的母牛;
n=2 f[2]=2; //最开始那头牛生了一只小牛; (生的第一只牛)
n=3 f[3]=3; //最开始的那头牛生第二只牛;
n=4 f[4]=4; //最开始那只牛生了第三只牛; 现在n=2时生的牛,生长了3年了,明年就可以生多1头牛;
n=5 f[5]=6;
现在的总牛数是6 因为第二年生的牛生多了一头牛
所以 f[5]=第一头牛前一年生的总数+(第二头牛生的数+第一头牛生的数);
因为(第二头牛生的数+第一头牛生的数)= 第二年牛的总数
得出f[5]=f[5-1]+f[5-3];
最终得出f[n]=f[n-1]+f[n-3]这个公式
注意事项:
注意最后要return 0;
scanf()!=EOF
参考代码:
#include <stdio.h>
int main(){
int f[56];
f[1]=1;
f[2]=2;
f[3]=3;
f[4]=4;
int i,n;
//for是初始化数组里牛总数
for(i=5;i<55;i++){
f[i]=f[i-1]+f[i-3];
}
//while是查找n=?的时候牛的总数
while(scanf("%d",&n)!=EOF){
if(n!=0){
printf("%d\n",f[n]);
}
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复