专栏文章

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

B4418题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@minjklww
此快照首次捕获于
2025/12/02 03:28
3 个月前
此快照最后确认于
2025/12/02 03:28
3 个月前
查看原文
本题考查分支结构的几个常见应用,代码比较综合。
首先要判断 A,B,C 中有无重复选项,换言之,只要 a=ba=b 或者 b=cb=c 或者 c=ac=a,那么小 K 都要举手示意。我们通常使用 || 来表示“或者”。
然后依次判断:
  • 如果 d=ad=a,那么输出 A。
  • 否则如果 d=bd=b,那么输出 B。
  • 否则如果 d=cd=c,那么输出 C。
如果上述三种情况都不符合要求,那么接着看“中庸之道”。
要判断第二大的数字是谁,有比较多的思路:
方法一:
如果 aa 是第二大的数,那么 “a<ba<b”和“a<ca<c恰好满足一个
在 C++ 中,可以使用 ^ 来表示“两者恰好满足其一”,例如 (a<b) ^ (a<c)。但是读者需要注意,^ 的本意是按位异或而非逻辑异或,所以只有 ^ 两侧都是 bool 类型的值时才会符合预期。
当然,可以利用 bool 转化成 int 的方法,使用 (a<b) + (a<c) == 1 来表示。
方法二:
先计算出第二大的数,然后依次判断 a,b,ca,b,c 是否是这个数。
具体地,第二大的数等于三个数字的和,减去最大数再减去最小数。三个数的最大数可以通过 max(a,max(b,c)) 来得到,当然,在更新的(C++ 11 及以上)语言版本中,可以直接写 max({a,b,c})
把这个数记为 ee,然后分别判断 a,b,ca,b,c 是否等于 ee 即可。

评论

2 条评论,欢迎与作者交流。

正在加载评论...