题解 | #汽水瓶#
汽水瓶
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;
}
}

查看6道真题和解析
上海得物信息集团有限公司公司福利 1182人发布