1 条题解
-
0
📝 题目大意
给定一个 的棋盘,数字 到 按行优先排列。判断两个给定的数字 和 ()所在的格子是否左右相邻。
💡 解题思路
-
题目分析:棋盘布局为
1 2 3 4 5 6 7 8 9左右相邻意味着两个数字在同一行且数值相差 。但仅靠数值差 不够——例如 和 虽然数值差 ,但 在第一行末尾、 在第二行开头,它们并不相邻。
-
算法推导:
- 条件一:,即两个数字在数值上连续。
- 条件二:(整数除法),即两个数字处于同一行。将数字减 后除以 得到的商即为行号: 对应第一行(), 对应第二行(), 对应第三行()。
- 两个条件同时满足时输出
Yes,否则输出No。
-
边界与细节:
- 题目保证 ,无需额外处理越界。
- 容易 WA 的情况:只检查 而忽略是否同行,会误判 、 等跨行相邻的情况。
⏱️ 复杂度分析
- 时间复杂度:,仅常数次运算。
- 空间复杂度:,仅使用几个变量。
💻 标准代码 (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
- 上传者