题解 | #汽水瓶#

汽水瓶

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;
    }
}
#华为笔试##牛客网在线编程##算法学习#
全部评论

相关推荐

点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务