Загрузка данных


import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();


        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("\nИсходная матрица:");
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = random.nextInt(100) + 1;
                System.out.print(matrix[i][j] + "\t");
            }
            System.out.println();
        }

        // Поиск максимального элемента и его координат
        int maxVal = 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] > maxVal) {
                    maxVal = matrix[i][j];
                    maxRow = i;
                    maxCol = j;
                }
            }
        }
        System.out.println("\nМаксимальный элемент: " + maxVal + " на позиции (" + maxRow + ", " + maxCol + ")");

        // Перемещаем максимальный элемент в верхний левый угол (0, 0)
        swapRows(matrix, maxRow, 0);
        swapCols(matrix, maxCol, 0);

        System.out.println("\nМатрица после перемещения максимального элемента в (0, 0):");
        printMatrix(matrix);

        // Поиск минимального элемента и его НОВЫХ координат
        int minVal = matrix[0][0];
        int minRow = 0;
        int minCol = 0;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] < minVal) {
                    minVal = matrix[i][j];
                    minRow = i;
                    minCol = j;
                }
            }
        }
        System.out.println("\nМинимальный элемент: " + minVal + " на новой позиции (" + minRow + ", " + minCol + ")");

        // 6. Проверяем, можно ли переместить минимальный элемент в правый нижний угол
        // Если он находится в 0 строке или 0 столбце то при перестановке 
        // мы неизбежно сдвинем максимальный элемент с места (0, 0).
        if (minRow == 0 || minCol == 0) {
            System.out.println("\nНЕЛЬЗЯ поместить минимальный элемент в правый нижний угол, " +
                    "так как он находится в 0 строке или 0 столбце. " +
                    "Его перемещение нарушит положение максимального элемента в (0, 0).");
        } else {
            // Перемещаем минимальный элемент в правый нижний угол (n-1, m-1)
            swapRows(matrix, minRow, n - 1);
            swapCols(matrix, minCol, m - 1);

            System.out.println("\nМинимальный элемент УСПЕШНО перемещен в правый нижний угол (" + (n - 1) + ", " + (m - 1) + "):");
            printMatrix(matrix);
        }

        scanner.close();
    }

    // обмен двух строк матрицы местами
    public static void swapRows(int[][] matrix, int r1, int r2) {
        if (r1 == r2) return; // Если строки совпадают, ничего не делаем
        for (int j = 0; j < matrix[0].length; j++) {
            int temp = matrix[r1][j];
            matrix[r1][j] = matrix[r2][j];
            matrix[r2][j] = temp;
        }
    }

    // обмен двух столбцов матрицы местами
    public 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;
        }
    }

    // вывод матрицы на экран
    public static void printMatrix(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                System.out.print(matrix[i][j] + "\t");
            }
            System.out.println();
        }
    }
}