N个空饮料瓶总共能换多少瓶饮料喝的问题

问题描述

多年前大学时做过的一道题,今天理发过程中无聊突然想起来,就试着重做一遍。
正题:假设你有N个空饮料瓶,规定3个空瓶可以换一瓶饮料喝,问题来了,你有的这N个空瓶可以换多少瓶饮料喝?举个例子,你有5个空瓶,先用3个空瓶换一瓶饮料喝完,就和之前剩下的2个空瓶得到3个空瓶,最后用这3个空瓶又可以换一瓶饮料喝,最后的最后剩一个空瓶,也就是5个空瓶总共能换2瓶饮料喝。

Talk is cheap, show me the code

解题思路

  1. 普通while循环求解
  2. 递归求解
  3. 动态规划求解
#include <iostream>

using namespace std;

//普通while循环求解
int getTheNum(int n)
{
    int total = 0;
    int m;
    int r;
    while(n>=3)
    {
        m = n / 3;
        r = n % 3;
        total += m;
        n = m + r;
    }
    return total;
}

//递归求解
int getTheNum2(int n)
{
    if (n<3)
    {
        return 0;
    }
    return n/3 + getTheNum2(n/3+n%3);
}

//动态规划求解
int getTheNum3(int n)
{
    if (n<3)
    {
        return 0;
    }
    int arr[n] = {0};
    for (int i = 3; i <= n; i++)
    {
        arr[i] = i/3 + arr[i/3 + i%3];
    }
    return arr[n];
}

int main()
{
    int n;
    cout<<"input n : ";
    cin>>n;
    cout<<"getTheNum : "<<getTheNum(n)<<endl;
    cout<<"getTheNum2 : "<<getTheNum2(n)<<endl;
    cout<<"getTheNum3 : "<<getTheNum3(n)<<endl;
    return 0;
}

写在最后

这个其实很简单,写着完的,最近在重新看多年前大学学的c++,虽然工作开发用不上,还是习惯地用c++来写解决问题的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值