问题:有一个5X6的灯矩阵,灯按一下就亮,再按一下就熄灭。现在有这样一种情况,在这个矩阵中任意按下一盏灯它本身以及它的上、下、左、右四个位置的灯的状态也会随之改变。
例如:红色表示灯亮,白色表示灯熄灭。假设在开始时,所有的灯都是亮的,当我们按下(1,1)位置的灯,灯的状态会发生如下图变化;当我们又按下(2,5)位置的灯后,它附近的会发生如下图的变化。
代码:
import numpy as npline = [[0] * 6] * 5for i in range(5): line[i] = input('请输入第' + str(i) + '行:').split(',') # 将line中的元素转为整型 line[i] = list(map(int, line[i]))puzzle = np.array(line)zero = np.zeros(6)# 在puzzle的最上面加入一行0puzzle = np.insert(puzzle, 0, values=zero, axis=0)# 在puzzle的最后一列加入一列0puzzle = np.insert(puzzle, 6, values=zero, axis=1)# 在puzzle的第0列加入一行0puzzle = np.insert(puzzle, 0, values=zero, axis=1)b = [[0 for col in range(8)] for row in range(6)]press = np.array(b)def guess(): for r in range(1, 5): for c in range(1, 7): press[r + 1][c] = (puzzle[r][c] + press[r][c] + press[r - 1][c] + press[r][c - 1] + press[r][c + 1]) % 2 for c in range(1, 7): if (press[5][c - 1] + puzzle[5][c] + press[5][c + 1] + press[4][c]) % 2 != puzzle[5][c]: return 0 return 1def enumeration(): while guess() == 0: press[1][1] += 1 c = 1 while (press[1][c] > 1): press[1][c] = 0 c += 1 press[1][c] += 1 continueenumeration()print('灯的初始状态:\n', puzzle[1:6, 1:7])print('按下结果为:\n', puzzle[1:6, 1:7])
运行结果:
请输入第0行:1,1,0,0,1,1请输入第1行:0,1,0,0,1,0请输入第2行:1,1,1,0,0,0请输入第3行:1,0,1,1,0,1请输入第4行:0,0,0,1,1,1灯的初始状态: [[1 1 0 0 1 1] [0 1 0 0 1 0] [1 1 1 0 0 0] [1 0 1 1 0 1] [0 0 0 1 1 1]]按下结果为: [[1 1 0 0 1 1] [0 1 0 0 1 0] [1 1 1 0 0 0] [1 0 1 1 0 1] [0 0 0 1 1 1]]
联系客服