2D阵列的最小/最大元素

时间:2016-04-21 04:17:05

标签: c++ arrays algorithm

float allmin[column];
float allmax[column];
float min= std::numeric_limits<float>::max();
float max= std::numeric_limits<float>::min();  

for(int y = 0; y < column; y++)
   {

    for(int x = 0; x < row; x++)
       {
         allmin[y] = std::min(matrix[x][y], min);
         allmax[y] = std::max(matrix[x][y], max);
       }

   cout << "Mins " << allmin[y] << "\n";
}

我需要每列的最小元素。我的矩阵是250x6,它打印的是矩阵的最后一行。

2 个答案:

答案 0 :(得分:2)

您需要进行两次更正:

不要为每个列使用相同的变量,而应使用不同的变量,例如直接使用allminallmax行。

在进入循环之前初始化它。一个经典的解决方案是使用行的第一个元素对其进行初始化,并检查循环中的每个元素。

for(int y = 0; y < column; y++)
   {
    allmin[y] = matrix[0][y];
    allmax[y] = matrix[0][y];
    for(int x = 1; x < row; x++)
       {
         allmin[y] = std::min(matrix[x][y], allmin[y]);
         allmax[y] = std::max(matrix[x][y], allmax[y]);
       }

   cout << "Mins " << allmin[y] << "\n";
}

答案 1 :(得分:0)

因为语句allmin[y] = std::min(matrix[x][y], min);,每次matrix[x][y] is always small than分钟(std :: numeric_limits :: max()), so when internal loop execute, allmin [y] is updated to ·matrix[x][y],所以最后{ {1}}已更新为allmin[y]matrix[259][y]行的最后一列)。 y有同样的问题。

您应该将代码更改为 ```     float allmin [column];     float allmax [column];     float min = std :: numeric_limits :: max();     float max = std :: numeric_limits :: min();

allmax[y] = std::max(matrix[x][y], max);

一切都会好的

相关问题