解题思路

给定一个 的矩阵 ,对于矩阵中的每个元素 ,计算除了第 行第 列之外所有元素的乘积,并找出所有这些乘积中的最大值。

解题步骤:

  1. 读取矩阵大小 ,以及矩阵元素
  2. 对每个位置 ,计算除了第 行第 列外其他元素的乘积
  3. 维护并更新最大乘积值
  4. 输出最终结果

代码

#include <iostream>
#include <vector>
using namespace std;

long shuzi(vector<vector<int>>& v, int i, int j) {
    long sum = 1;
    // 计算同列其他元素的乘积
    for(int x = 0; x < v.size(); x++) {
        if(x != i) sum *= v[x][j];
    }
    // 计算同行其他元素的乘积
    for(int y = 0; y < v[0].size(); y++) {
        if(y != j) sum *= v[i][y];
    }
    return sum;
}

int main() {
    int n, m;
    while(cin >> n >> m) {
        vector<vector<int>> v(n, vector<int>(m));
        // 读入矩阵
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                cin >> v[i][j];
            }
        }
        // 计算最大乘积
        long max = 0;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                max = std::max(max, shuzi(v, i, j));
            }
        }
        cout << max << endl;
    }
    return 0;
}
import java.util.*;

public class Main {
    public static long shuzi(int[][] v, int i, int j) {
        long sum = 1;
        // 计算同列其他元素的乘积
        for(int x = 0; x < v.length; x++) {
            if(x != i) sum *= v[x][j];
        }
        // 计算同行其他元素的乘积
        for(int y = 0; y < v[0].length; y++) {
            if(y != j) sum *= v[i][y];
        }
        return sum;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[][] v = new int[n][m];
            
            // 读入矩阵
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < m; j++) {
                    v[i][j] = sc.nextInt();
                }
            }
            
            // 计算最大乘积
            long max = 0;
            for(int i = 0; i < n; i++) {
                for(int j = 0; j < m; j++) {
                    max = Math.max(max, shuzi(v, i, j));
                }
            }
            System.out.println(max);
        }
    }
}
def shuzi(v, i, j):
    sum = 1
    # 计算同列其他元素的乘积
    for x in range(len(v)):
        if x != i:
            sum *= v[x][j]
    # 计算同行其他元素的乘积
    for y in range(len(v[0])):
        if y != j:
            sum *= v[i][y]
    return sum

while True:
    try:
        n, m = map(int, input().split())
        v = []
        # 读入矩阵
        for _ in range(n):
            row = list(map(int, input().split()))
            v.append(row)
        
        # 计算最大乘积
        max_val = 0
        for i in range(n):
            for j in range(m):
                max_val = max(max_val, shuzi(v, i, j))
        print(max_val)
    except:
        break

算法及复杂度

  • 算法:暴力枚举每个位置,计算对应的乘积
  • 时间复杂度: - 对每个位置都需要计算行和列的乘积
  • 空间复杂度: - 存储输入矩阵