酷代码 AI
菜单
服务商

C++ 实现:N 盏灯经 M 人操作后哪些灯关闭?附代码详解

```cpp #include <iostream> using namespace std; int main() { int N, M; // 读取输入的N和M cin >> N >> M; // 定义一个布尔数组来表示灯的状态,初始全部为打开(true) bool lights[5001] = {true}; for (int i = 1; i <= N; i++) { lights[i] = 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; } } return 0; } ``` 代码解释: 1. 输入读取:使用`cin`读取输入的`N`和`M`,分别表示灯的数量和人的数量。 2. 灯状态初始化:定义一个布尔数组`lights`来表示灯的状态,初始时所有灯都处于打开状态(`true`)。 3. 模拟操作:通过两层循环模拟每个人对灯的操作。外层循环遍历每个人,内层循环遍历该人编号倍数的灯,并将其状态取反。 4. 输出结果:遍历所有灯,将关闭的灯的编号输出,编号之间用逗号分隔。使用`first`变量来标记是否是第一个输出的编号,避免在第一个编号前输出逗号。 ######[AI问答 | 441点数解答 | 2025-11-24 13:49:37]

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