题解 | #汽水瓶#

汽水瓶

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

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务