@[wuxiangtianbei](/user/894033)
第一,数组开小了;
第二,如果灯的标号是当前人的标号,灯就做相反操作。
```c
if(i%r==0)a[i]=!a[i];
```
by Ggsddu_zzy @ 2022-12-08 21:08:22
**我给你改了一下(我的风格可能跟你不一样**)
$AC$代码:
```c
#include<stdio.h>
int main()
{
int a[5005]={0},n,r,j,i;
scanf("%d",&n);
for(i=1;i<=n;i++){
a[i]=0;
}
for(r=1;r<=n;++r){
for(i=r;i<=n;i+=r){//i要+=r因为每次要按R1......Rn的倍数开关灯
if(i%r==0)a[i]=!a[i];//取反优化一下
}
}
for(j=1;j<=n;j++){
if(a[j]==1)
printf("%d ",j);
}
}
```
**我当时没做出来我也想了好一会 **
~~哈哈哈~~
by WangRui_26_ @ 2023-01-05 14:58:44