题解
2026-09-18 17:03:42
发布于:浙江
4阅读
0回复
0点赞
#include <iostream>
using namespace std;
// 定义最大范围,题目中N不大于5000
int a[5005];
int main(){
int n, m;
cin >> n >> m;
// 1. 初始化:所有灯初始处于开启状态,我们用 1 表示开启,0 表示关闭
for(int i = 1; i <= n; i++){
a[i] = 1;
}
// 2. 模拟 M 个人的操作
for(int i = 1; i <= m; i++){
// 第 i 个人操作编号为 i 的倍数的灯
// 优化:直接从 i 开始,步长为 i,避免遍历所有 j 再取模
for(int j = i; j <= n; j += i){
// 做相反处理:如果原来是1(开)变成0(关),原来是0(关)变成1(开)
if(a[j] == 1){
a[j] = 0;
} else {
a[j] = 1;
}
}
}
bool first = true; // 用于控制逗号输出,第一个输出的数字前不需要逗号
for(int i = 1; i <= n; i++){
if(a[i] == 0){ // 题目问哪几盏灯是关闭的
if(!first){
cout << ",";
}
cout << i;
first = false; // 标记已经输出过至少一个数字
}
}
return 0;
}
这里空空如也


有帮助,赞一个