解题思路:
穷举遍历。
①我们可以将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语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:552 |
WU-拆分位数 (C++代码)浏览:779 |
川哥的吩咐 (C语言代码)浏览:609 |
前10名 (C语言代码)浏览:726 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:542 |
小O的数字 (C++代码)浏览:757 |
C语言训练-斐波纳契数列 (C语言代码)浏览:503 |
明明的随机数 (C语言代码)浏览:613 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:509 |
Manchester-台球碰撞-(附带图解)浏览:3711 |