原题链接:汽水瓶
解题思路:
大致思路题目中已经给出,这里不再赘述,只讲如何具体实现:
假设有 n 个空瓶子,我们假定先将这 n 个空瓶子尽可能的全部换成饮料,设可以换成 m 瓶饮料,此时未使用的空瓶子个数为 n-m 个,
未使用的空瓶子个数(n-3*m) + m 瓶饮料可以换成的空瓶子(m)为此轮过程所剩到的空瓶子数,也就是下轮开始时的新空瓶子数;
当所剩瓶子数大于等于2时,循环可以继续进行,当所剩瓶子数为 2 时,就只能再换一瓶饮料了,循环结束;
所需变量:
输入的空瓶数:n;
每轮循环中可以换得的饮料数(同样是所换饮料产生的空瓶子数):tt;
循环过程中兑换的饮料总数:temp;
每轮循环后所剩的空瓶子数(同样是下轮循环新的空瓶子数):res;
参考代码:
//题目 1072: 汽水瓶
#include using namespace std;
int chuli(int n)
{
int temp=0;
int res=n;
int tt=0;
//剩余两个依然可以找老板借
while(res>=2)
{
//tt是一个及其关键的数据,用来存放上次剩的空瓶子可以再换几瓶(同样还剩几个空瓶子)
tt = res/3;
//temp是可以换几瓶
temp += tt;
//未使用的空瓶子数
res = res%3;
//换的新的瓶子又是新瓶子
res += tt;
//此时的res就是换完喝完一次还剩的瓶子 ,这一行代码没有意义
res=res;
//处理res=2时的情况,比较特殊
if(res==2)
{
temp+=1;
res=0;
}
}
return temp;
}
int main(){
int n;
while(cin>>n)
{
if(n==0)
{
break;
}
//用来存储结果
int result=0;
//开始处理
result=chuli(n);
cout<<result<<endl;
}
return 0;
}感谢大家的阅读,如果感觉对您有帮助,请动动小手点个赞呗!
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复