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