Вопрос задан 07.09.2023 в 05:38.
Предмет Информатика.
Спрашивает Корнев Данил.
C++ Дана матрица N × M. Переставляя ее строки и столбцы, переместить наибольший элемент в верхний
левый угол. Определить можно ли таким же образом поместить минимальный элемент в нижний правый угол.Ответы на вопрос
Отвечает Дурасов Роман.
Ну вот как-то так, если что-то не ясно - спрашивай. Инициализации начальных элементов нет, так что без соответствующей правки она не заработает.
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;
}
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;
}
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для выполнения этой задачи вам нужно будет выполнить следующие шаги:
- Найти наибольший элемент в матрице и его индексы (строка и столбец).
- Поменять местами строку, содержащую наибольший элемент, с первой строкой матрицы.
- Поменять местами столбец, содержащий наибольший элемент, с первым столбцом матрицы.
Вот пример кода на 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;
}
Этот код позволяет вам найти наибольший элемент и поместить его в верхний левый угол матрицы, а также проверить, можно ли поместить минимальный элемент в нижний правый угол.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Информатика 30
Информатика 25
Информатика 101
Информатика 14
Информатика 501
Информатика 52
Информатика 42
Информатика 238
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili
