题解 | #汽水瓶#

汽水瓶

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

相关推荐

点赞 评论 收藏
分享
酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
27双非本,最近面试被挂麻了面试官说简历内容太简单了,技术栈要单独一行,各位佬有啥建议吗
LZStarV:项目太简单了,你像用什么开发的技术栈没必要写一句话,按点写就好了;有特色的比如说WebSocket、视频流这种狠狠吹,那就好看多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务