酷代码 AI
菜单
服务商

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]

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