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,它打印的是矩阵的最后一行。
答案 0 :(得分:2)
您需要进行两次更正:
不要为每个列使用相同的变量,而应使用不同的变量,例如直接使用allmin
和allmax
行。
在进入循环之前初始化它。一个经典的解决方案是使用行的第一个元素对其进行初始化,并检查循环中的每个元素。
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);
一切都会好的