在二维数组的所有行中查找最大的元素

时间:2019-04-09 20:23:42

标签: c++

有人告诉我这里出了什么问题吗?我正在尝试查找所有行中的最大元素,但是,largest2只是一直设置为maximum的最新迭代。我不知道为什么。目标是找到所有行中最大的元素。然后,将该值与所有列中的最大值进行比较,并输出整个数组中的最大值。如果我能弄清楚这部分,我想剩下的就可以解决。有人有提示吗?

for (row = 0; row < NUMBER_OF_ROWS; row++) {
    largest = matrix[row][0];
    largest2 = 0;
    largest3 = 0;
    for (col = 1; col < NUMBER_OF_COLUMNS; col++)
        if (largest < matrix[row][col])
            largest = matrix[row][col];
    if (largest2 < largest)
            largest2 = largest;

    cout << "Largest element in row is: " << largest << endl;   
}    
cout << "largest element in all rows is: " << largest2;

1 个答案:

答案 0 :(得分:0)

您正在外部循环中重新初始化largest2,从而丢失了先前迭代的结果。因此,最后的cout仅显示最后一次迭代的结果,而不是所有迭代的结果。

尝试以下方法:

largest2 = 0; // <-- moved outside the outer loop!

for (row = 0; row < NUMBER_OF_ROWS; row++) {
    largest = matrix[row][0];
    for (col = 1; col < NUMBER_OF_COLUMNS; col++) {
        if (largest < matrix[row][col])
            largest = matrix[row][col];
    }

    if (largest2 < largest)
        largest2 = largest;

    cout << "Largest element in row is: " << largest << endl;   
}    

cout << "largest element in all rows is: " << largest2;

话虽如此,您可以考虑使用std::max_element()std::max()清理此代码,而不是手动循环/比较值:

#include <algorithm>

largest2 = 0;

for (row = 0; row < NUMBER_OF_ROWS; row++) {
    largest = *std::max_element(&(matrix[row][0]), &(matrix[row][NUMBER_OF_COLUMNS]));
    largest2 = std::max(largest, largest2);

    cout << "Largest element in row is: " << largest << endl;   
}    

cout << "largest element in all rows is: " << largest2;