多组输入。每组占一行,输入 n 表示灯的数目和 k 表示人数,输出开着的灯编号, n和 k 均不大于 10000,c++代码实现
时间: 2024-02-22 21:58:00 浏览: 56
好的,以下是 C++ 实现的代码:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n, k;
while (cin >> n >> k) {
bool lights[10001];
memset(lights, 0, sizeof(lights)); // 初始化为全灭
for (int i = 1; i <= k; i++) {
for (int j = i; j <= n; j += i) {
lights[j] = !lights[j]; // 翻转第 j 盏灯
}
}
for (int i = 1; i <= n; i++) {
if (lights[i]) {
cout << i << " "; // 输出开着的灯的编号
}
}
cout << endl;
}
return 0;
}
```
这段代码与 Python 实现类似,也是读入 n 和 k 后,通过循环对灯进行操作。使用一个 bool 类型的数组 lights 表示每盏灯的状态,初始为全灭。对于每个人,从第 i 盏灯开始,每隔 i 个灯进行一次翻转操作。最后遍历一遍 lights 数组,输出状态为 true(即开着)的灯的编号即可。
需要注意的是,在 C++ 中,bool 类型的数组中 true 的值为 1,false 的值为 0,因此翻转操作可以直接使用 ! 运算符。同时,当输出完每组结果后,需要手动输出一个换行符。
阅读全文