题目的主要信息:
- 三个空汽水瓶可以换一瓶汽水,还剩两个瓶子的时候可以向老板借一瓶。
- 求解能换几次汽水瓶
方法一:
用while循环模拟换瓶子的过程,每次判断手中的瓶子个数是否大于1,如果为2瓶则可以借一瓶,其他情况则可以继续用三瓶换一瓶。count用于记录整个过程中换的次数。 具体做法:
#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;
}
}
复杂度分析:
- 时间复杂度:,while循环的时间复杂度为。
- 空间复杂度:,只用了常数空间。
方法二:
找规律,三个空瓶子可以换一个新的,相当于一次用两个瓶子。
具体做法:
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n>0){//不为0瓶
cout<<n/2<<endl;//直接计算
}
}
return 0;
}
复杂度分析:
- 时间复杂度:,计算只花费常数时间。
- 空间复杂度:,只用了常数空间。