B3932 [语言月赛 202402] 酒 题解

· · 题解

Source & Knowledge

2024 年 2 月语言月赛,由洛谷网校入门计划/基础计划提供。

题目大意

一小桶酒含有酒 x 升,一大桶酒含有酒 y 升。

编号为 1 的李白先喝了 a 小桶酒,然后喝了 b 大桶酒。
编号为 2 的李白喝了 c 大桶酒。
编号为 3 的李白喝了 d 大桶酒,还喝了 e 升酒。

求喝酒最多的李白编号和对应的喝酒升数。

题目分析

通过简单的数学计算,可以发现:

因此我们只需要找出其中的最大值,并找到对应编号即可。

一种方法是,先使用 max() 函数计算出三者中的最大值,之后依次检验 1 \sim 3 号李白的喝酒量是否与最大值相等。如果相等,则直接输出,停止后续的检验(若有多个李白喝的酒一样多,那么输出编号最小的)。

在 printf 中,如果想要输出保留两位小数的浮点数,可以使用 %.2f 的格式化字符串。这告诉 printf 函数要输出一个浮点数,并且保留两位小数。

核心代码如下:

double mx = max(a * x + b * y, max(c * y, d * y + e));
if (a * x + b * y == mx) {
    printf("1 %.2lf\n", mx);
} else if (c * y == mx) {
    printf("2 %.2lf\n", mx);
} else {
    printf("3 %.2lf\n", mx);
}

视频讲解