题解 | #汽水瓶#

汽水瓶

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

相关推荐

03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务