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


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();
    }
}
}