原题链接:汽水瓶
解题思路:
这个题目就是找到处理空瓶子的核心算法,把它填入到我们的框架里就行:
int main() { int p=0,n; while(scanf("%d",&n)!=0) { if(n==0)break; else { /*........核心函数...............*/ } } return 0; }
一开始我们应该注意到这个10个空瓶子,它得到的结果是5,说明在最后剩下2个空瓶子的时候,可以再喝一瓶(也就是向老板借瓶,然后喝了凑齐3个空的,换一瓶还给老板),这里就得到一个判断条件:
if(n==2) { sum+=1;//sum是喝的总数 return sum; }
接着我们就想到当n>=3的时候我们的处理方法该怎么写,如下分析:
if(n>=3) { rest=n%3;//总的空瓶换了之后,剩下的空瓶; tmp=n/3;//总的空瓶换的可以喝的实瓶数量; sum=sum+tmp;//总共喝的实瓶数; rest=rest+tmp;//剩下的空瓶数加上喝完之后的空瓶即为总的空瓶数; drink_num(rest);//通过递归来判断;这个也是核心函数的关键; }
注意事项:
我们在统计sum总数的时候要注意清零;
其他的基本看一遍代码都可以明白;
参考代码:
#include<stdio.h> int sum=0; int drink_num(int n) { int rest; int tmp; if(n<=1) { return sum; } if(n==2) { sum+=1; return sum; } if(n>=3) { rest=n%3; tmp=n/3; sum=sum+tmp; rest=rest+tmp; drink_num(rest); } } int main() { int p=0,n; while(scanf("%d",&n)!=0) { if(n==0)break; else { /*........核心函数...............*/ p=drink_num(n); printf("%d\n",p); sum=0;//这是注意事项该考虑的点,不清零的话后面会累加; } } return 0; }
大家有什么不懂的欢迎讨论,我们一起学习。
我也是小白一枚。
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复