`
cm14k
  • 浏览: 30648 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

喝汽水问题

 
阅读更多

问题描述:

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

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics