解题思路:

大致思路题目中已经给出,这里不再赘述,只讲如何具体实现:

假设有 n 个空瓶子,我们假定先将这 n 个空瓶子尽可能的全部换成饮料,设可以换成 m 瓶饮料,此时未使用的空瓶子个数为 n-m 个,

未使用的空瓶子个数(n-3*m) + m 瓶饮料可以换成的空瓶子(m)为此轮过程所剩到的空瓶子数,也就是下轮开始时的新空瓶子数;

当所剩瓶子数大于等于2时,循环可以继续进行,当所剩瓶子数为 2 时,就只能再换一瓶饮料了,循环结束;

所需变量:

输入的空瓶数:n;

每轮循环中可以换得的饮料数(同样是所换饮料产生的空瓶子数):tt;

循环过程中兑换的饮料总数:temp;

每轮循环后所剩的空瓶子数(同样是下轮循环新的空瓶子数):res;

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//题目 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)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论