C语言新手30分

B2092 开关灯

wuxiangtianbei @ 2022-12-08 20:08:25

#include<stdio.h>
int main()
{
int a[100]={0},n,i,r,j;
scanf("%d",&n);
for(r=1;r<=n;r++)
for(i=1;i<=n;i++)
if(i%r==0)a[i]=1-a[i];
for(j=1;j<=n;j++)
{
if(a[j]==1)
printf("%d ",j);
}
}

by Ggsddu_zzy @ 2022-12-08 21:08:22

@wuxiangtianbei

第一,数组开小了;

第二,如果灯的标号是当前人的标号,灯就做相反操作。

if(i%r==0)a[i]=!a[i];

by WangRui_26_ @ 2023-01-05 14:58:44

我给你改了一下(我的风格可能跟你不一样

```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); } } ``` **我当时没做出来我也想了好一会 ** ~~哈哈哈~~

|