1 条题解

  • 0
    @ 2026-6-19 10:30:36

    📝 题目大意

    给定一个 3×33 \times 3 的棋盘,数字 1199 按行优先排列。判断两个给定的数字 AABBA<BA < B)所在的格子是否左右相邻。

    💡 解题思路

    1. 题目分析:棋盘布局为

      1 2 3
      4 5 6
      7 8 9
      

      左右相邻意味着两个数字在同一行且数值相差 11。但仅靠数值差 11 不够——例如 3344 虽然数值差 11,但 33 在第一行末尾、44 在第二行开头,它们并不相邻。

    2. 算法推导

      • 条件一:BA=1B - A = 1,即两个数字在数值上连续。
      • 条件二:(A1)/3=(B1)/3(A - 1) / 3 = (B - 1) / 3(整数除法),即两个数字处于同一行。将数字减 11 后除以 33 得到的商即为行号:00 对应第一行(1,2,31,2,3),11 对应第二行(4,5,64,5,6),22 对应第三行(7,8,97,8,9)。
      • 两个条件同时满足时输出 Yes,否则输出 No
    3. 边界与细节

      • 题目保证 1A<B91 \leq A < B \leq 9,无需额外处理越界。
      • 容易 WA 的情况:只检查 BA=1B - A = 1 而忽略是否同行,会误判 (3,4)(3,4)(6,7)(6,7) 等跨行相邻的情况。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅常数次运算。
    • 空间复杂度O(1)O(1),仅使用几个变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    int main() {
        int A, B;
        cin >> A >> B;
        // 条件1: B - A == 1 确保数值连续
        // 条件2: (A-1)/3 == (B-1)/3 确保在同一行(整数除法)
        if (B - A == 1 && (A - 1) / 3 == (B - 1) / 3) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    725
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者