C++ 实现:模拟多人操作 N 盏灯,输出最终关闭灯的编号
以下是使用 C++ 语言解决该问题的代码: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int N, M; // 读取输入的 N 和 M cin >> N >> M; // 创建一个布尔类型的向量来表示灯的状态,初始都为开启状态(true) vector<bool> lights(N + 1, true); // 模拟每个人对灯的操作 for (int person = 1; person <= M; person++) { for (int light = person; light <= N; light += person) { // 对编号为 person 倍数的灯进行相反处理 lights[light] =!lights[light]; } } // 用于标记是否是第一个输出的关闭灯的编号 bool first = true; // 遍历所有灯,找出关闭的灯并输出其编号 for (int i = 1; i <= N; i++) { if (!lights[i]) { if (!first) { cout << ","; } cout << i; first = false; } } cout << endl; return 0; } ``` 代码解释: 1. 输入读取:使用 `cin` 读取输入的 `N` 和 `M`,分别表示灯的数量和人的数量。 2. 灯状态初始化:使用 `vector<bool>` 来表示灯的状态,初始时所有灯都处于开启状态(`true`)。 3. 模拟操作:通过两层循环模拟每个人对灯的操作。外层循环遍历每个人,内层循环遍历所有编号为当前人编号倍数的灯,并将其状态取反。 4. 输出结果:遍历所有灯,找出关闭的灯并输出其编号,使用逗号分隔。 复杂度分析: - 时间复杂度:$O(M * N)$,其中 $M$ 是人的数量,$N$ 是灯的数量。 - 空间复杂度:$O(N)$,主要用于存储灯的状态。 ######[AI问答 | 486点数解答 | 2025-11-24 13:28:29]
- Python 实现赛车手积分排名:从数据到清晰榜单(字节豆包 | 182点数解答 | 2024-10-20 16:16:44)280
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)78
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)79
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)350
- Python匈牙利算法:求解二分图最大匹配边数(含代码及详细解析)(字节豆包 | 715点数解答 | 2025-12-12 18:44:19)55
- 二分图最大匹配边数求解:从输入到代码实现全解析(字节豆包 | 275点数解答 | 2025-12-13 21:24:15)56
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)322
- Java 状态模式:模拟 TCP 连接多种状态及行为转换(GPT | 2147点数解答 | 2024-12-19 22:19:37)292
- Java实现状态模式:模拟TCP连接状态管理及行为处理(GPT | 1541点数解答 | 2024-12-19 22:19:57)281
- 洛谷乒乓球题解:11 分制与 21 分制比赛结果计算全攻略(DeepSeek | 675点数解答 | 2025-04-28 18:19:45)305
- C++ 模拟:助冒险者用神秘数字构建直角三角形,开发要点大揭秘! (DeepSeek | 156点数解答 | 2025-09-14 21:30:10)287
- P1007:小核桃数组变换难题,Python代码揭秘最终平方和!(字节豆包 | 416点数解答 | 2026-02-07 18:24:18)46