矩阵元素相乘----搜狗2016研发工程师编程题

来源:互联网 发布:oracle java 编辑:程序博客网 时间:2024/05/23 21:43

[编程题] 矩阵元素相乘
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]中的最大值。

输入描述:
第一行两个整数n和m。之后n行输入矩阵,均为非负整数。


输出描述:
一行输出答案。

输入例子:
3 55 1 8 5 21 3 10 3 37 8 5 5 16

输出例子:
358400
#include <vector>#include <iostream>using namespace::std ;int main() {    int row, col ;        while ( cin >> row >> col ) {        vector<vector<int>> vec( row, vector<int>( col, 0 ) ) ;        int max = 0 ;        for ( int i = 0; i < vec.size(); ++ i ) {            for ( int j = 0; j < vec[0].size(); ++ j ) {                cin >> vec[i][j] ;            }        }                for ( int i = 0; i < row; ++ i ) {            for ( int j = 0; j < col; ++ j ) {                int tmpl = 1 ;                for ( int l = 0; l < col ; ++ l ) {                    if ( l != j )                     tmpl *= vec[i][l] ;                }                                int tmpr = 1 ;                for ( int r = 0; r < row; ++ r ) {                    if ( r != i )                    tmpr *= vec[r][j] ;                }                                max = max > ( tmpr * tmpl ) ? max : ( tmpr * tmpl ) ;            }        }                cout << max << endl ;    }    return 0 ;}




0 0