C++ 中矩阵每行元素之和的最大值

c++server side programmingprogramming

本题中,给定一个二元矩阵 mat[][]。我们的任务是编写一个程序,用 C++ 求出矩阵每行元素之和的最大值。

问题描述

这里,我们将从矩阵的每一行中取出一个元素,使得当前行元素大于最后一行元素,以此求出最大和。我们将找到满足上述条件的最大元素和,如果不可能,则输出 -1。

我们举个例子来理解这个问题:

输入

mat[][] = {{4, 6, 1},
{2, 5, 7},
{9, 1, 2}}

输出

22

解释

第一行 = 6
第二行 = 7
第三行 = 9
和 = 6 + 7 + 9 = 22

解决方法

一个简单的解决方案是从矩阵的最后一行开始。在此处找到最大数字并将其添加到 MaxSum 中,然后向上移动一行,找到小于其下一行最大元素的最大数字。重复此操作,直到到达顶行。如果我们找不到小于最大数字的数字,则返回 -1。

示例

用于说明我们解决方案工作原理的程序

#include <iostream>
using namespace std;
# define row 3
# define col 3

int RowMaxSum(int a[row][col]){
   int maxValLastRow = 10000;
   int maxSum = 0;
   for (int i = row - 1; i >= 0; i--){
      int maxNo = -1;
      for (int j = 0; j < col; j++)
         if (maxValLastRow > a[i][j] && a[i][j] > maxNo)
            maxNo = a[i][j];
      if (maxNo == -1)
         return -1;
      maxValLastRow = maxNo;
      maxSum += maxValLastRow;
   }
   return maxSum;
}
int main(){
   int a[3][3] = {{4, 6, 1},
                  {2, 5, 7},
                  {9, 1, 2}};
   cout<<"The maximum sum of elements from each row in the matrix is "<<RowMaxSum(a);
   return 0;
}

输出

The maximum sum of elements from each row in the matrix is 22

相关文章