Как найти минимальное значение в каждой строке матрицы n * m и поместить эти значения в новый массив? У меня есть этот код, но он не работает должным образом:
void min(const int t[max_city][max_bird], int allmin[], int n, int m)
{
int min=t[0][0];
for(int i=0; i<n; ++i)
{
for(int j=0; j<m; ++j)
{
if(t[i][j]<min)
{
min=t[i][j];
}
}
allmin[i]=min;
cout << i+1 << ". min: " << allmin[i] << endl;
}
}
декларировать min
внутри первого цикла и инициализируйте его там:
for(int i=0; i<n; ++i)
{
int min= INT_MAX; //do this here so that it gets initialized each time!
for(int j=0; j<m; ++j)
{
//your code
}
//etc
}
Использовать INT_MAX
, включают <climits>
,
С помощью std::min_element
, Ваша функция может быть переписана как:
void min(const int t[max_city][max_bird], int allmin[], int n, int m)
{
for(int i=0; i<n; ++i)
{
allmin[i] = *std::min_element(t[i], t[i] + m);
}
}
Стало так мало!
Функция std::min_element
возвращает указатель на минимальный элемент, поэтому вы разыменовать возвращаемый указатель для получения значения (минимального элемента).
Использовать std::min_element
в вашей программе вы должны включить этот заголовок:
#include <algorithm>
Надеюсь, это поможет.
Других решений пока нет …