3.25 阿里笔试题 2 AC python
给出一个二维矩阵,这个矩阵的每一行和每一列都是一个独立的等差数列,其中一些数据缺失了,现在需要推理隐藏但是可以被唯一确定的数字,然后对输入的查询进行回答。
输入描述:
第一行,n,m,q分别表示矩阵的行数,列数和查询的条数。
接下来的n行,每行m个数表示这个矩阵,0表示缺失数据。
接下来q行,每行两个数字i,j表示对矩阵中第i行第j列的数字进行查询。
输出描述:
如果可以确定该位置的数字,则输出数字,如果不能确定则输出UNKNOWN。
输入示例:
2 3 6
1 0 3
0 0 0
1 1
1 2
1 3
2 1
2 2
2 3
输出示例:
1
2
3
Unknown
Unknown
Unknown
# 对每行每列进行操作
def col(n):
for i in n:
test_i = i.copy()
while 0 in test_i:
test_i.remove(0)
while 'unknown' in test_i:
test_i.remove('unknown')
if len(test_i) >= 2 and len(set(test_i)) == 1:
for j in range(len(i)):
i[j] = set(test_i)[0]
elif len(test_i) >= 2 and len(set(test_i)) > 1:
index_1 = i.index(test_i[0])
index_2 = i.index(test_i[1])
gongcha = int((test_i[1] - test_i[0]) / (index_2 - index_1))
shouxiang = test_i[0] - (index_1 - 1) * gongcha
for j in range(len(i)):
if i[j] == 0 or 'unknown':
i[j] = shouxiang + (j - 1) * gongcha
else:
for j in range(len(i)):
if i[j] == 0:
i[j] = 'unknown'
return n
# 平整
def flatten(a):
if not isinstance(a, (list, )):
return [a]
else:
b = []
for item in a:
b += flatten(item)
return b
# 转换
def transfor_list(n):
df = [[0 for i in range(len(n))]for i in range(len(n[0]))]
for i in range(len(n)):
for j in range(len(n[i])):
df[j][i] = n[i][j]
return df