Найти среднее геометрическое элементов в столбике, что содержит минимальный элемент матрицы

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

Пишу программу на с++ и не понимаю как найти среднее геометрическое только для одного столбца, в котором расположен минимальный элемент массива размером 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;

}

Ответы

▲ 0

Как абсолютно правильно написал @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!