Вопрос задан 07.09.2023 в 05:38. Предмет Информатика. Спрашивает Корнев Данил.

C++ Дана матрица N × M. Переставляя ее строки и столбцы, переместить наибольший элемент в верхний

левый угол. Определить можно ли таким же образом поместить минимальный элемент в нижний правый угол.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Дурасов Роман.
Ну вот как-то так, если что-то не ясно - спрашивай. Инициализации начальных элементов нет, так что без соответствующей правки она не заработает.

int main() {
    // Something
    int a[n][m];
    // Init

    // Находим максимум
    int im = 0, jm = 0, max = a[0][0];
    for (int i = 0 ; i < n; ++i)
        for (int j = 0; j < m; ++j)
            if (a[i][j] > max) {
                max = a[i][j];
                im = i;
                jm = j;
            }

    // Двигаем максимум вниз
    swapCollumn(a, n, m, im, n-1);
    swapRow(a, n, m, jm, m-1);

}

//Премещаем 2 столбца местами
void swapCollumn(int ** a, int n, int m, int c1, int c2) {
    if (c1 < 0 || c2 < 0 || c1 >= n || c2 >= n)
        return;
    for (int i = 0; i < m; ++i)
        swap(&a[c1][i], &a[c2][i]);
}

//Перемещаем 2 строки местами
void swapRow(int ** a, int n, int m, int r1, int r2) {
    if (r1 < 0 || r2 < 0 || r1 >= m || r2 >= m)
        return;
    for (int i = 0; i < n; ++i)
        swap(&a[i][r1], &a[i][r2]);
}

void swap(int * el1, int el2) {
    int t = *el1;
    *el1 = *el2;
    *el2 = *el1;
}



0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для выполнения этой задачи вам нужно будет выполнить следующие шаги:

  1. Найти наибольший элемент в матрице и его индексы (строка и столбец).
  2. Поменять местами строку, содержащую наибольший элемент, с первой строкой матрицы.
  3. Поменять местами столбец, содержащий наибольший элемент, с первым столбцом матрицы.

Вот пример кода на C++, который выполняет эти шаги:

cpp
#include <iostream> #include <vector> using namespace std; int main() { int N, M; cout << "Введите размеры матрицы (N x M): "; cin >> N >> M; // Создаем матрицу размером N x M vector<vector<int>> matrix(N, vector<int>(M)); cout << "Введите элементы матрицы:\n"; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> matrix[i][j]; } } // Найдем индексы наибольшего элемента int maxElement = matrix[0][0]; int maxRow = 0; int maxCol = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (matrix[i][j] > maxElement) { maxElement = matrix[i][j]; maxRow = i; maxCol = j; } } } // Поменяем местами строку с наибольшим элементом и первую строку swap(matrix[0], matrix[maxRow]); // Поменяем местами столбец с наибольшим элементом и первый столбец for (int i = 0; i < N; i++) { swap(matrix[i][0], matrix[i][maxCol]); } // Проверим, можно ли поместить минимальный элемент в нижний правый угол int minElement = matrix[0][0]; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (matrix[i][j] < minElement) { minElement = matrix[i][j]; } } } if (minElement == matrix[N - 1][M - 1]) { cout << "Минимальный элемент можно поместить в нижний правый угол." << endl; } else { cout << "Минимальный элемент нельзя поместить в нижний правый угол." << endl; } // Выводим обновленную матрицу cout << "Матрица после перестановки:" << endl; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << matrix[i][j] << " "; } cout << endl; } return 0; }

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

0 0

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

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос