题解 | #汽水瓶#

汽水瓶

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
全部评论

相关推荐

11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务