酷代码 AI
菜单
服务商

巧用代码判断:能否让 2n 个小朋友都拥有满意同桌?

```cpp #include <iostream> #include <vector> int main() { int n; std::cin >> n; std::vector<int> p(2 * n); for (int i = 0; i < 2 * n; ++i) { std::cin >> p[i]; } for (int i = 0; i < 2 * n; ++i) { int want = p[i] - 1; if (i == want || p[want] != i + 1) { std::cout << "No"; return 0; } } std::cout << "Yes"; return 0; } ``` 代码解释 1. 输入处理: - `std::cin >> n;`:读取桌子的数量 `n`。 - `std::vector<int> p(2 * n);`:创建一个大小为 `2 * n` 的整数向量 `p`,用于存储每个小朋友想和谁做同桌的信息。 - 通过 `for` 循环读取每个小朋友想和谁做同桌的编号并存储到 `p` 中。 2. 判断逻辑: - 使用 `for` 循环遍历每个小朋友。对于当前小朋友 `i`,获取其想和做同桌的小朋友编号 `want`(这里减 1 是为了将编号转换为 0 索引)。 - 检查两个条件:一是 `i` 是否等于 `want`,即小朋友是否想和自己做同桌;二是 `p[want]` 是否等于 `i + 1`,也就是对方想和做同桌的人是否是当前小朋友。如果这两个条件中有一个不满足,就输出 `No` 并结束程序。 3. 输出结果: - 如果循环结束都没有发现不满足条件的情况,说明所有小朋友都能满意,输出 `Yes`。 ######[AI问答 | 445点数解答 | 2025-11-16 20:07:02]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]