bac0id's Blog

第二杯半价活动的最大优惠

22 Dec 2021

我校第一食堂二楼奶茶店有“奶茶第二杯半价”的优惠。如果顾客购买了两杯奶茶,最终店员在结算时,会将价格便宜的奶茶作为半价的那一杯。在这家店,如何购买才是最划算呢?

数学方法

假设我们要买 $2$ 杯奶茶,价格分别为 $a,b \space \left(a,b>0\right).$ 原本,我们需要支付 $s=a+b$,但在扣除半价折扣后仅需支付

\[p = \max \left( a,b \right) + \frac{\min \left( a,b \right)}{2}\]

折扣率为

\[r = 1-\frac{p}{s}\]

目标是要让 $r$ 最大。显然 $a,b$ 是对称的,不妨设 $b=a+d,\space d\geq0$,则

\[s = 2a+d, \space p = a+d+\frac{a}{2} = \frac{3a}{2}+d\]

代入 $r$ 中,得

\[r = 1-\frac{p}{s} = \frac{a}{4a+2d} = \frac{1}{4+\frac{2d}{a}} \leq \frac{1}{4}\]

当且仅当 $d=0$ 时等号成立。所以,当 $2$ 杯奶茶价格相同时,折扣率是最大的,为 $25\%$.

计算机求解

用 C++ 语言编写代码,模拟用户购买 $2$ 杯奶茶组合的付款情况:

#include<cstdio>
#include<cmath>
int main(){
    for(int a=8;a<=16;++a)for(int b=a;b<=16;++b){
        double p=fmax(a,b)+fmin(a,b)/2.0;
        printf("原价%d+%d=%d 支付%.1lf 折扣率%d%\n",
            a,
            b,
            a+b,
            p,
            (int)((1-p/(a+b))*100)
        );
    }
    return 0;
}    

程序运行输出如下。得到结论与数学方法相同,即当 $2$ 杯奶茶价格相同时,折扣率是最大的,为 $25\%$.

原价8+8=16 支付12.0 折扣率25%
原价8+9=17 支付13.0 折扣率23%
原价8+10=18 支付14.0 折扣率22%
原价8+11=19 支付15.0 折扣率21%
原价8+12=20 支付16.0 折扣率19%
原价8+13=21 支付17.0 折扣率19%
原价8+14=22 支付18.0 折扣率18%
原价8+15=23 支付19.0 折扣率17%
原价8+16=24 支付20.0 折扣率16%
原价9+9=18 支付13.5 折扣率25%
原价9+10=19 支付14.5 折扣率23%
原价9+11=20 支付15.5 折扣率22%
原价9+12=21 支付16.5 折扣率21%
原价9+13=22 支付17.5 折扣率20%
原价9+14=23 支付18.5 折扣率19%
原价9+15=24 支付19.5 折扣率18%
原价9+16=25 支付20.5 折扣率18%
原价10+10=20 支付15.0 折扣率25%
原价10+11=21 支付16.0 折扣率23%
原价10+12=22 支付17.0 折扣率22%
原价10+13=23 支付18.0 折扣率21%
原价10+14=24 支付19.0 折扣率20%
原价10+15=25 支付20.0 折扣率19%
原价10+16=26 支付21.0 折扣率19%
原价11+11=22 支付16.5 折扣率25%
原价11+12=23 支付17.5 折扣率23%
原价11+13=24 支付18.5 折扣率22%
原价11+14=25 支付19.5 折扣率21%
原价11+15=26 支付20.5 折扣率21%
原价11+16=27 支付21.5 折扣率20%
原价12+12=24 支付18.0 折扣率25%
原价12+13=25 支付19.0 折扣率24%
原价12+14=26 支付20.0 折扣率23%
原价12+15=27 支付21.0 折扣率22%
原价12+16=28 支付22.0 折扣率21%
原价13+13=26 支付19.5 折扣率25%
原价13+14=27 支付20.5 折扣率24%
原价13+15=28 支付21.5 折扣率23%
原价13+16=29 支付22.5 折扣率22%
原价14+14=28 支付21.0 折扣率25%
原价14+15=29 支付22.0 折扣率24%
原价14+16=30 支付23.0 折扣率23%
原价15+15=30 支付22.5 折扣率25%
原价15+16=31 支付23.5 折扣率24%
原价16+16=32 支付24.0 折扣率25%