喝汽水问题

问题描述:

1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?

这个问题其实是个比较典型的递推问题,每2个空瓶都可以再换1瓶新的汽水,这样一直递推下去,直到最后不能换到汽水为止。

解法一:

/*
 * description:
 * 1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
 *
 * auther: cm
 * date:2010/11/28
 */
#include <stdio.h>

#define MONEY 20    //钱数
#define PRICE 1     //汽水单价
#define PERCOUNT 2  //兑换规则

int main(void)
{
    int drinkNum = 0;       //喝掉的汽水数量
    int emptyNum = 0;       //空瓶数量
    int num = MONEY / PRICE;//汽水数量

    while (num > 0)
    {
        drinkNum += num;
        emptyNum += num;//空瓶子数量等于上次剩余的加上这次喝掉的数量
        num = emptyNum / PERCOUNT;//兑换的汽水数量
        emptyNum -= num * PERCOUNT;//本次兑换剩余的空瓶子数量
    }
    printf("drinkNum: %d\n",drinkNum);
    printf("emptyNum: %d\n", emptyNum);

    return 0;
}

 

解法二:

数学推导

设汽水单价为P, 瓶子价钱为x, 汽水实际价钱为y(即除去瓶子价钱), N个空瓶兑换一瓶汽水,总钱数为M

x + y = P

N * x = P

可求得x, y

则喝的汽水总数为:M / y

如上面那道题:

x = 0.5

y = 0.5

结果为:20 / 0.5 = 40

注:允许使用最后的两个瓶子换一瓶汽水再将空瓶抵给卖方

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值