题解:B4418 [语言月赛 202510] 选择题

· · 题解

本题考查分支结构的几个常见应用,代码比较综合。

首先要判断 A,B,C 中有无重复选项,换言之,只要 a=b 或者 b=c 或者 c=a,那么小 K 都要举手示意。我们通常使用 || 来表示“或者”。

然后依次判断:

如果上述三种情况都不符合要求,那么接着看“中庸之道”。

要判断第二大的数字是谁,有比较多的思路:

方法一:

如果 a 是第二大的数,那么 “a<b”和“a<c恰好满足一个

在 C++ 中,可以使用 ^ 来表示“两者恰好满足其一”,例如 (a<b) ^ (a<c)。但是读者需要注意,^ 的本意是按位异或而非逻辑异或,所以只有 ^ 两侧都是 bool 类型的值时才会符合预期。

当然,可以利用 bool 转化成 int 的方法,使用 (a<b) + (a<c) == 1 来表示。

方法二:

先计算出第二大的数,然后依次判断 a,b,c 是否是这个数。

具体地,第二大的数等于三个数字的和,减去最大数再减去最小数。三个数的最大数可以通过 max(a,max(b,c)) 来得到,当然,在更新的(C++ 11 及以上)语言版本中,可以直接写 max({a,b,c})

把这个数记为 e,然后分别判断 a,b,c 是否等于 e 即可。