问题描述:
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
注:允许使用最后的两个瓶子换一瓶汽水再将空瓶抵给卖方