Загрузка данных
import java.util.Scanner;
public class Main { public static void main(String[] args) { // Задача №9: Дана матрица N x М. Переставляя ее строки и столбцы, // переместить наибольший элемент в верхний левый угол. // Определить, можно ли таким же образом поместить минимальный элемент в нижний правый угол.
Scanner scanner = new Scanner(System.in);
System.out.print("Введите количество строк N: ");
int n = scanner.nextInt();
System.out.print("Введите количество столбцов M: ");
int m = scanner.nextInt();
int[][] matrix = new int[n][m];
System.out.println("Введите элементы матрицы:");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j] = scanner.nextInt();
}
}
// 1. Поиск максимального и минимального элементов
int maxRow = 0, maxCol = 0;
int minRow = 0, minCol = 0;
int maxVal = matrix[0][0];
int minVal = matrix[0][0];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (matrix[i][j] > maxVal) {
maxVal = matrix[i][j];
maxRow = i;
maxCol = j;
}
if (matrix[i][j] < minVal) {
minVal = matrix[i][j];
minRow = i;
minCol = j;
}
}
}
System.out.println("\nМаксимальный элемент: " + maxVal + " на позиции (" + maxRow + ", " + maxCol + ")");
System.out.println("Минимальный элемент: " + minVal + " на позиции (" + minRow + ", " + minCol + ")");
// 2. Перемещаем максимальный элемент в верхний левый угол (0, 0)
swapRows(matrix, maxRow, 0);
swapCols(matrix, maxCol, 0);
System.out.println("\nМатрица после перемещения максимального элемента в (0,0):");
printMatrix(matrix);
// Определяем новые координаты минимального элемента после первых перестановок
int currentMinRow = minRow;
if (minRow == 0) currentMinRow = maxRow;
else if (minRow == maxRow) currentMinRow = 0;
int currentMinCol = minCol;
if (minCol == 0) currentMinCol = maxCol;
else if (minCol == maxCol) currentMinCol = 0;
// 3. Проверяем, можно ли поместить минимальный элемент в правый нижний угол (n-1, m-1)
// Перемещение возможно, если текущая строка и столбец мин. элемента не равны 0
// (иначе мы затронем нулевую строку/столбец, где уже закреплен максимальный элемент).
boolean canPlaceMin = (currentMinRow != 0 && currentMinCol != 0);
if (canPlaceMin) {
swapRows(matrix, currentMinRow, n - 1);
swapCols(matrix, currentMinCol, m - 1);
System.out.println("\nМинимальный элемент УСПЕШНО перемещен в правый нижний угол (" + (n - 1) + ", " + (m - 1) + "):");
printMatrix(matrix);
} else {
System.out.println("\nНЕЛЬЗЯ поместить минимальный элемент в правый нижний угол таким же образом, " +
"так как это нарушит положение максимального элемента в верхнем левом углу (затронет 0-ю строку или 0-й столбец).");
}
scanner.close();
}
// Метод для обмена строк матрицы местами
private static void swapRows(int[][] matrix, int r1, int r2) {
if (r1 == r2) return;
int[] temp = matrix[r1];
matrix[r1] = matrix[r2];
matrix[r2] = temp;
}
// Метод для обмена столбцов матрицы местами
private static void swapCols(int[][] matrix, int c1, int c2) {
if (c1 == c2) return;
for (int i = 0; i < matrix.length; i++) {
int temp = matrix[i][c1];
matrix[i][c1] = matrix[i][c2];
matrix[i][c2] = temp;
}
}
// Метод для вывода матрицы на экран
private static void printMatrix(int[][] matrix) {
for (int[] row : matrix) {
for (int val : row) {
System.out.print(val + "\t");
}
System.out.println();
}
}
}