名企笔试:搜狗2016研发工程师笔试(矩阵元素相乘)

矩阵元素相乘


1、题目要求

 

A[n,m]是一个n行m列的矩阵,a[i,j]表示A的第i行j列的元素,定义x[i,j]为A的第i行和第j列除了a[i,j]之外所有元素(共n+m-2个)的乘积,即

x[i,j]=a[i,1]*a[i,2]*…*a[i,j-1]*…*a[i,m]*a[1,j]*a[2,j]…*a[i-1,j]*a[i+1,j]…*a[n,j]

现输入非负整形的矩阵A[n,m],求MAX(x[i,j]),即所有的x[i,j]中的最大值。


 

2、程序分析

 

  • 先求出各行各列的乘积
  • 各行各列的乘积交叉相乘然后在除去交叉点的数值的平方,注意,是平方,因为行的乘积和列的乘积里都有这个交叉点的数值

3、示例代码

 

#coding=utf-8
lst = [[5,1,8,5,2],[1,3,10,3,3],
       [7,8,5,5,16]]

row_lst = []
column_lst = []
for tmp_lst in lst:
    product = 1
    for item in tmp_lst:
        product *= item
    row_lst.append(product)

for i in range(5):
    product = 1
    for j in range(3):
        product *= lst[j][i]
    column_lst.append(product)

print row_lst
print column_lst
max = 0
for i in range(3):
    for j in range(5):
        product = row_lst[i]*column_lst[j]/(lst[i][j]**2)

        if product > max:
            max = product


print max