Найти среднее геометрическое элементов в столбике, что содержит минимальный элемент матрицы
Пишу программу на с++ и не понимаю как найти среднее геометрическое только для одного столбца, в котором расположен минимальный элемент массива размером n на m.
int main()
{
srand((unsigned)time(0));
const int n = 5;
const int m = 8;
int A[n][m];
int i;
int j;
cout << "array: " << endl;
for (i = 0; i < n; i++){
for (j = 0; j < m; j++){
A[i][j] = rand() % 80;
cout.width(5);
cout << A[i][j];
}
cout << "\n";
}
int min = A[0][0];
for (i = 0; i < n; ++i){
for (j = 0; j < m; ++j)
if (A[i][j] < min){
min = A[i][j];
}
}
cout << "Min element " << min << endl;
}
Ответы (1 шт):
Как абсолютно правильно написал @NowhereMan вам нужно при поиске минимума запоминать столбец, в котором этот минимум находится.
if (A[i][j] < min){
min = A[i][j];
colNum = j;
}
Поскольку среднее геометрическое вычисляется только для положительных чисел, то массив можно делать типа unsigned.
Также у вас тут возможная логическая ошибка - вероятнее всего ноль не должен участвовать в расчетах, т.к. ноль как особое число не имеет знака и поэтому не считается положительным. Хотя формально 0 не нарушает формулу - корень любой степени из ноля будет ноль. Если убрать ноль то будет как-то так:
A[i][j] = rand() % 80 + 1; // генерятся числа от 1 до 80
Кроме того, чтобы дважды не делать перебор всего массива, поиск минимума можно выполнять сразу при заполнении.
int min = INT_MAX;
....
{
A[i][j] = rand() % 80; // генерятся числа от 0 до 79
if (A[i][j] < min){
min = A[i][j];
colNum = j;
}
}
После выполнения цикла, у вас известен номер столбца, в котором находится минимальный элемент - colNum. Но если у вас несколько одинаковых минимальных элементов, то здесь запомнится первый из них. Вы сами должны определить логику - как действовать, если минимальных элементов несколько в разных столбцах.
Проходите циклом по этому столбцу и ищете среднее геометрическое.
double average = 1.0;
for (i = 0; i < n; i++)
average *= A[i][colNum]; // произведение всех чисел столбца
Поскольку у вас умножение, при больших n возможно переполнение переменной average!