1 条题解

  • 0
    @ 2026-4-2 21:45:13

    题目描述 有三个兄弟,编号分别为 11(大哥)、22(二哥)、33(三弟)。 他们约定见面。到了时间,恰好有 两位兄弟准时到达,而 另一位兄弟迟到了。

    输入给出准时到达的两位兄弟的编号 aabb1a,b31 \le a, b \le 3aba \neq b,顺序任意)。 你需要输出 迟到的那位兄弟的编号。

    输入格式 一行,两个整数 aabb,用空格分隔。

    1a,b31 \le a, b \le 3

    aba \neq b

    输出格式 一个整数,即迟到兄弟的编号。

    样例 输入

    texttext 33 11 输出

    texttext 22 解释:准时到达的是 33 号和 11 号,那么迟到的一定是 22 号。

    解题思路 方法一:枚举所有可能情况 三个兄弟编号为 1,2,31,2,3。 已知两个准时到达的编号 aabb,那么迟到的那个人就是 1,2,3{1,2,3} 中 除了 aabb 之外 的那个数。

    可以直接用 if-else 判断:

    如果 (a,b)=(1,2)(a,b) = (1,2)(2,1)(2,1),则迟到的是 33

    如果 (a,b)=(1,3)(a,b) = (1,3)(3,1)(3,1),则迟到的是 22

    如果 (a,b)=(2,3)(a,b) = (2,3)(3,2)(3,2),则迟到的是 11

    这种方法正确,但代码较长。

    方法二:数学公式法(标程所用) 观察三个数 1,2,31,2,3 的和:

    1+2+3=61+2+3=6 已知其中两个数 aabb,那么第三个数 cc 一定满足:

    a+b+c=6 a+b+c=6 因此: c=6ab c=6−a−b 这个公式无需任何条件判断,直接计算即可得到迟到的兄弟编号。

    算法步骤 读入两个整数 aabb

    计算 c=6abc = 6 - a - b

    输出 cc

    正确性证明 因为 aabb1,2,3{1,2,3} 中两个不同的数,所以 a+ba+b 的可能值为:

    1+2=31+2=3,此时 c=63=3c=6-3=3

    1+3=41+3=4,此时 c=64=2c=6-4=2

    2+3=52+3=5,此时 c=65=1c=6-5=1

    每种情况得到的 cc 恰好是剩下的那个数,且 c1,2,3c \in {1,2,3}cac \neq acbc \neq b

    因此公式总是正确。

    复杂度分析 时间复杂度:O(1)O(1),只进行常数次算术运算。

    空间复杂度:O(1)O(1),只使用了几个整型变量。

    如果兄弟编号不是 1,2,31,2,3,而是任意三个互不相同的整数 p,q,rp,q,r,那么迟到者的编号可以用 p+q+rabp+q+r - a - b 计算。

    本题也可以使用异或运算:123=01 \oplus 2 \oplus 3 = 0,迟到的编号 = ab0a \oplus b \oplus 0?需要小心,异或用于三个不同的数时,abc=123=0a \oplus b \oplus c = 1 \oplus 2 \oplus 3 = 0,所以 c=abc = a \oplus b?验证:12=31 \oplus 2 = 313=21 \oplus 3 = 223=12 \oplus 3 = 1,确实成立。因此也可以用 cout << (a ^ b) << endl;。但标程采用加法,更直观。

    本题非常简单,核心是观察到三个数的和为 66,从而用减法直接得出缺失的数。
    这种“已知总和与部分元素,求另一元素”的技巧在竞赛中很常见。

    • 1

    信息

    ID
    6269
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者