解题思路:
这个题目就是找到处理空瓶子的核心算法,把它填入到我们的框架里就行:
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语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:591 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1267 |
完数 (C语言代码)浏览:757 |
C语言训练-字符串正反连接 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:538 |
1073题解浏览:652 |
C二级辅导-阶乘数列 (C语言代码)浏览:671 |
P1044 (C++代码)浏览:550 |
C语言程序设计教程(第三版)课后习题8.3 (C++代码)浏览:527 |