题目的主要信息:

  • 三个空汽水瓶可以换一瓶汽水,还剩两个瓶子的时候可以向老板借一瓶。
  • 求解能换几次汽水瓶

方法一:

用while循环模拟换瓶子的过程,每次判断手中的瓶子个数是否大于1,如果为2瓶则可以借一瓶,其他情况则可以继续用三瓶换一瓶。count用于记录整个过程中换的次数。 alt 具体做法:

#include<iostream>

using namespace std;

int main(){
    int n;
    while(cin>>n){
       if(n==0) {
           return 0;
       }
       int count=0,num=n;//count用于统计换的次数,num表示当前剩余的瓶子数
       while(num>1){//只有大于1瓶才能换
           if(num==2) {//还剩两瓶的时候可以借一瓶
               num=0;
               count++;
           }
           count+=num/3;//每三瓶换一瓶
           num=num/3+num%3;//剩余的瓶子数
       }
       cout<<count<<endl;
    }
}

复杂度分析:

  • 时间复杂度:O(n)O(n),while循环的时间复杂度为O(n)O(n)
  • 空间复杂度:O(1)O(1),只用了常数空间。

方法二:

找规律,三个空瓶子可以换一个新的,相当于一次用两个瓶子。

具体做法:

#include<iostream>

using namespace std;

int main(){
    int n;
    while(cin>>n){
        if(n>0){//不为0瓶
            cout<<n/2<<endl;//直接计算
        }
    }
    return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),计算只花费常数时间。
  • 空间复杂度:O(1)O(1),只用了常数空间。