原题链接:蓝桥杯算法提高VIP-开灯游戏
解题思路:
穷举遍历。
①我们可以将9个开关看成9位二进制数,1表示开,0表示关。那么所有的可能也就是十进制下0~511。
②对十进制下0~511进行遍历,先将其转化为9位二进制数,然后判断每一个开关的状态,从而去调控
灯的状态。
每个开关按一次,灯的状态会发生变化开变为关,关变为开。此处假设灯关闭时的状态为0,打开时的
状态为1。则每次涉及到某个灯的状态变化时,我们可以将其此时的状态异或1,如此可以很方便的将其
状态进行转化。
③将符合条件的开关状态进行输出即可。
注意事项:
参考代码:
def f(): for s in range(512): s = list(map(int,'{:09b}'.format(s))) #记录每个开关状态 Light = [0]*9 #记录9个灯的状态 for i in range(9): #检索每个开关的状态,从而控制灯的状态 if s[i]: if i == 0: Light[1] = Light[1]^1 Light[3] = Light[3]^1 elif i == 1: Light[0] = Light[0]^1 Light[2] = Light[2]^1 Light[4] = Light[4]^1 elif i == 2: Light[1] = Light[1]^1 Light[5] = Light[5]^1 elif i == 3: Light[0] = Light[0]^1 Light[4] = Light[4]^1 Light[6] = Light[6]^1 elif i == 4: Light[1] = Light[1]^1 Light[3] = Light[3]^1 Light[5] = Light[5]^1 Light[7] = Light[7]^1 elif i == 5: Light[2] = Light[2]^1 Light[4] = Light[4]^1 Light[8] = Light[8]^1 elif i == 6: Light[3] = Light[3]^1 Light[7] = Light[7]^1 elif i == 7: Light[4] = Light[4]^1 Light[6] = Light[6]^1 Light[8] = Light[8]^1 elif i == 8: Light[5] = Light[5]^1 Light[7] = Light[7]^1 if sum(Light) == 4: for i in s: print(i,end = '') print() if __name__ == '__main__': f()
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复