求助C语言中的开灯问题!有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍

求助C语言中的开灯问题!有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍数的灯开关,第3人按编号为3的灯(其中关的灯被打开 开的灯被熄灭),求最后哪些灯开着? 。。。这是书上的答案,请问![a]就是等于1吗?还有if(first) first=0那里没看懂,帮我理一下思路吧,万分感谢!

第1个回答  推荐于2017-12-15
这个是白皮书上的题吧。。
把数组a清零之后,每次 j%i==0 a[j] = !a[j];取反的意思就是把0变非零,非零变零。
0和非零,来模拟灯的状态,0表示灯在关着,取非!之后表示灯在开着。
if(first)first = 0;就是为了满足题意的输出要求,书上写的很清楚,如果是想要单纯学算法,不需要在意那些细节,掌握重要思路及代码就行了;如果要比赛,这个就比较重要,需要谨慎。
if(first)就相当于if(first!=0)的意思。
还有什么不懂的吗?本回答被提问者采纳
相似回答