如何在二维数组的行中找到最大的总和

时间:2014-12-14 23:25:46

标签: c++ multidimensional-array sum

我已经找到了与此问题相关的一些答案,但我并没有真正了解它们的工作原理。我需要找到二维中每一行的最大总和并将其打印出来,但不要打印任何其他总和。以下是我到目前为止的情况:

#include <iostream>
using namespace std;

int main (int argc, char ** argv)
{

    int v[3][5]; // 3 rows, then 5 columns
    for (int i=0; i<3; i++){
        for (int j=0; j<5; j++){
            cin >> v[i][j];

        }
    }
    //test reading value
    for (int i=0; i<3; i++){
            for (int j=0; j<5; j++){
                cout << v[i][j];
                if (i!=4)
                    cout << ' ';

            }
            cout << '\n';
        }
    //solve it
    for (int i=0; i<3; i++){
        int sum = 0;
                for (int j=0; j<5; j++){
                    sum += v[i][j];
                }
                cout << sum << '\n';
            }
    return 0;
}

这段代码现在打印出2D数组中每一行的总和,但我需要我的程序才能打印出最大的行数。这是我现在唯一的问题。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以通过跟踪为数组的每一行计算的最大总和来实现此目的。

//solve it
int largestSum = 0;
for (int i = 0; i<3; i++)
{
    int sum = 0;
    for (int j = 0; j<5; j++)
    {
        sum += v[i][j];
    }
    // check to see if we have computed a new larger sum and save it if we have.
    if (sum > largestSum)
    {
        largestSum = sum;
    }
}
cout << "largest sum: " << largestSum << '\n';

或者,如果允许您使用C ++标准库中的其他组件,则可以使用std::accumulate来计算总和而不是使用内部外观,并使用std::max来确定当前和以前计算过的总和。

#include <algorithm>
#include <numeric>

//solve it
int largestSum = 0;
for (int i = 0; i<3; i++)
{
    int sum = std::accumulate(std::begin(v[i]), std::end(v[i]), 0);
    largestSum = std::max(sum, largestSum);
}
cout << "largest sum: " << largestSum << '\n';

答案 1 :(得分:2)

这是我能提出的最短解决方案,也正确处理负数(C ++ 11):

int maxSum = std::numeric_limits<int>::min();
for (const auto& row : v)
   maxSum = std::max(maxSum, std::accumulate(std::begin(row), std::end(row), 0));
std::cout << maxSum << std::endl;

答案 2 :(得分:1)

int biggestSum = 0;

for (int i=0; i<3; i++) {
    int currentSum = 0;      // sum of values in this row
    for (int j=0; j<5; j++){
            currentSum += v[i][j];
    }
  if ( currentSum > biggestSum) biggestSum = currentSum;  // we have new max
}

cout << biggestSum << '\n';