题解 | #汽水瓶#
汽水瓶
http://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f
using namespace std;
int wantdrink(int num){
if (num == 1){
return 0;
}
if (num == 2){
return 1;
}
int mybottle;
mybottle = num/3 + (num-3*(num/3));
//当前可以兑换最多的空瓶
return num/3+wantdrink(mybottle);
}
int main() {
int num;
while (cin >> num){
if (num == 0){
break;
}
cout << wantdrink(num) << endl;
}
return 0;
}
递归,目标是空瓶
- 1、读取初始瓶子(注意输入0后break)
- 2、在自写方法内创建新变量接收剩余空瓶
- 这里由于剩余空瓶可能还可以交换新饮料,即套用递归
- 3、可以交换的空瓶为 "num/3 + wantdrink(mybottle)"
- 其中num/3是当前可以喝到的,wantdrink(mybottle)是下一轮可以喝到的,按照轮计算就比较清晰。
- 4、最后递归闭环处理,根据例子知道两瓶还可以借一瓶子(我是老板我就不会借,哼),因此还剩两瓶的时候可以再加一瓶,即return1