矩阵元素相乘
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