题解 | #汽水瓶#

汽水瓶

https://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f

解题思路:
思考:
  • 1.拥有一定数量的空瓶子,可换几瓶汽水?若不可以换,可否在可以归还所借瓶子的前提下向老板借汽水?借几瓶?
  • 2.换完汽水后,考虑目前借的瓶子总数和拥有的空瓶子数,去换汽水还是需要再借瓶子?回到1的情况。
以局部最优的思想来看,拥有空瓶总数 { 本来拥有的+ 已经借到的(可以为0)}大于等于3时,不需要再借瓶子,并且至少拥有2个空瓶子时,才可以借一个瓶子
#include<iostream>
using namespace std;

int main() {
    int n;
    while(cin>>n){
        if(n==0){
            break;
        }
        int maxDrink = 0 ;//有n个空汽水瓶的条件下可以喝到的最多的汽水
        if(n < 2){
            maxDrink = 0;
        }
        else if(n == 3 || n == 2){
            maxDrink = 1;
        }
        else{
            int emptyBottles = n ;//初始化空瓶子数
            int borrowBottles = 0;  //向老板借的瓶子数
            int getNewBottles = 0 ;//喝完饮料留下的瓶子
            while(true){
                if(emptyBottles + borrowBottles >= 3){ //可以换新的汽水
                    getNewBottles = (emptyBottles + borrowBottles)/3 ; //更新喝完饮料留下的瓶子
                    maxDrink += getNewBottles; //更新喝到的汽水瓶数
                    emptyBottles = emptyBottles - 3*getNewBottles + getNewBottles ;//更新拥有的空瓶子数量
                    continue;
                }
                if(emptyBottles > 1){
                    borrowBottles++;
                }
                else{
                    break;
                }
            }
        }
        cout<<maxDrink<<endl;
    }
}
#华为笔试##牛客网在线编程##算法学习#
全部评论

相关推荐

码农索隆:邮件那么小的内存,把邮箱都干满了
点赞 评论 收藏
分享
10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务