二维数组的最小/最大元素

Min/max element of 2D array

本文关键字:元素 二维数组      更新时间:2023-10-16
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 ,它打印的是矩阵的最后一行。

您需要进行两项更正:

不要对每列使用相同的变量,而是使用不同的变量,例如直接使用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";
}

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

您应该将代码更改为``` 浮点全部[列]; 浮点全部最大值[列]; 浮点最小值= std::numeric_limits::max(); float max= std::numeric_limits::min();

for(int y = 0; y < column; y++)
{
    allmin[y] = min
    allmax[y] = max
    for(int x = 0; x < row; x++)
    {
         allmin[y] = std::min(matrix[x][y], allmin[y]); //allmin[y] always store the min value has meet before
         allmax[y] = std::max(matrix[x][y], allmax[y]); //allmax[y] always store the max value has meet before
   }
   cout << "Mins " << allmin[y] << "n";
}

一切都会好起来