C语言的开灯问题,有短代码不理解 求大神解答。

#include<stdio.h>
#include<string.h>
#define maxn 1050
int a[maxn];
int main()
{
int n,k,first=1;
memset(a,0,sizeof(a));
scanf("%d %d",&n,&k);
for(int i=1;i<=k;i++) //
for(int j=1;j<=n;j++)//
if(j%i==0)a[j]=!a[j];//这是什么意思?
for(int i=1;i<=n;i++)
if(a[i])
{
if(first)first=0;
else
printf(" ");
printf("%d",i);
}
printf("\n");
return 0;
}

a[j]=!a[j]的意思是a[j]取原来值的逻辑反,比如原来为0,则取反后为1保存,原来如果是1,则运算后保存为0, 可以用a[j]=1-a[j];代替
温馨提示:答案为网友推荐,仅供参考
相似回答