我需要一些帮助来解决这个问题。我需要写一个填充剧院座位的功能。 例如,我们有这个剧院:
theater = [ [1, 1, 1, 0], # 1 row
[1, 0, 1, 0], # 2 row
[0, 0, 0, 0], # 3 row
]
我们必须从行的开头填补席位
首先,我们必须填充最少的座位
如果我们有两排相同数量的填充座位,我们将填充一个行号较小的行(如果第3行与第3行填充的座位数相同,则必须填写第2行)。
最后,我们必须填补,直到所有座位都填满。
空座位为0,填充空座位为1。
结果必须是元组列表 - 第一个元素是行号,第二个元素是列号 - (2,1) - 第2行和第1列。
示例:
theater = [ [1, 1, 1],
[1, 0, 0],
[1, 0, 0],
[1, 1, 0] ]
expected = [(4, 3), (2, 2), (2, 3), (3, 2), (3, 3)]
答案 0 :(得分:0)
没有人会告诉你非常初步的事情。
我可以沿着正确的路线发送给您。查找如何定义二维数组。为行和列创建2个变量。从0,0开始行和列。继续增加列,直到它等于一行中的最大座位,将其设置为零并增加行。
如何在python enter link description here
中定义二维数组答案 1 :(得分:0)
这个想法是:
通过这个程序这段代码:
theater = [ [1, 1, 1],
[1, 0, 0],
[1, 0, 0],
[1, 1, 0] ]
empty = [[(i+1 ,j+1) for j in range(len(theater[i])) if theater[i][j] == 0] for i in range(len(theater)) ]
empty = empty[::-1]
#print empty
final_result = []
for i in range(len(empty)):
result = []
if i != len(empty)-1 and empty[i] not in final_result:
j = i+1
while len(empty[i]) == len(empty[j]):
flag = False
for first, second in zip(empty[i], empty[j]):
if first[1] != second[1]:
flag = True
break
if flag:
break
else:
result.insert(0, empty[j])
j = j+1
if j == len(empty):
break
for rr in result:
final_result.append(rr)
final_result.append(empty[i])
if empty[i] not in final_result:
final_result.append(reversed(empty[i]))
expected = []
for i in final_result:
expected.extend(i)
print expected
输出:
[(4, 3), (2, 2), (2, 3), (3, 2), (3, 3)]