@LetMeDieYung

Как исправить вывод матрицы С++?

Всем доброго времени суток, решаю задачу на с++ нужно найти максимальный элемент в матрице и строку с этим элементом заменить на предпоследний столбик, но если максимальный элемент расположен не в последней строке матрицы, то при замене почему то предпоследний элемент строки и столбца заменяется на случайное число из матрицы, что делать?
код и тесты ниже:

void replaceColumn(int** matrix, int size) {
    int maxRow = 0;
    int maxElement = 0;

    // Находим строку с максимальным элементом
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            if (matrix[i][j] > maxElement) {
                maxElement = matrix[i][j];
                maxRow = i;
            }
        }
    }

    // Заменяем предпоследний столбец найденной строки
    for (int i = 0; i < size; i++) {
        matrix[i][size - 2] = matrix[maxRow][i];
    }


тесты:

Исходная матрица:
49      69      74      40      74
83      88      45      9       46
93      3       98      22      90
6       50      59      57      20
52      2       59      28      21

Матрица после замены столбца:
49      69      74      93      74
83      88      45      3       46
93      3       98      98      90
6       50      59      98      20
52      2       59      90      21


И вот если макс элемент в последней строке:

Исходная матрица:
42      65      84      84      42
84      83      76      53      58
67      2       72      15      76
45      48      3       65      52
7       74      98      6       29

Матрица после замены столбца:
42      65      84      7       42
84      83      76      74      58
67      2       72      98      76
45      48      3       6       52
7       74      98      29      29
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
при замене почему то предпоследний элемент строки и столбца заменяется на случайное число из матрицы

не на случайное же, а поскольку строка пересекается с заменяемым столбцом, то на тот элемент, который был из строки скопирован в столбец ранее.

Можно пофиксить например так:

void replaceColumn(int** matrix, int size) {
    int maxRow = 0;
    int maxElement = 0;
    int copy;

    // Находим строку с максимальным элементом
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            if (matrix[i][j] > maxElement) {
                maxElement = matrix[i][j];
                maxRow = i;
            }
        }
    }

    copy = matrix[maxRow][size - 2];
    // Заменяем предпоследний столбец найденной строки
    for (int i = 0; i < size; i++) {
        matrix[i][size - 2] = (i == size - 2) ? copy : matrix[maxRow][i];
    }

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы