今天下午我又做了一道有意思的题目与大家分享一下,此题是南阳OJ77开灯问题,代码如下:
#include<stdio.h> int main() { int i,j,n,k; scanf("%d %d",&n,&k); for(i=1;i<=n;i++) { int p=0; for(j=1;j<=k;j++) { if(i%j==0) p=!p; } if(p) printf("%d ",i); } printf(" "); return 0; }
先开始我真的感觉这道题好难,后来我看了讨论区的讨论结果,我彻底顿悟了,开灯问题的关键思想就是对“!”的应用,没看别人的之前我也想到了要用“0”和“1”来标记“i”是否该被输出,但是苦于没有好的方法解决。我看到“!”后,彻底明白该如何做这道题了。代码就是上面那样。但是我感觉这个代码还是有问题的。虽然他可以在南阳OJ上可以AC,但我发现printf("%d ",i);是有问题的,不知大家发现没有,在输出最后一个数的后面会多出一个空格来。我一时也没什么好的主意,请大家再加以改正,谢谢。