JavaRush /Blog Java /Random-ES /Resolver problemas que involucran matrices unidimensional...
Анзор Кармов
Nivel 31
Санкт-Петербург

Resolver problemas que involucran matrices unidimensionales y bidimensionales.

Publicado en el grupo Random-ES
Este artículo considerará (y, en mayor medida, proporcionará un análisis independiente) problemas que involucran matrices. Mejoraremos nuestras habilidades en las siguientes áreas:
  1. matrices unidimensionales

    1. Problemas “Continuar la secuencia” ;
    2. Tareas de búsqueda de elementos;
    3. Problemas relacionados con la clasificación de elementos de una matriz.
  2. matrices bidimensionales

    1. Tareas “Construir una matriz de la forma” ;
    2. Tareas “Encontrar elementos en los lugares más inesperados (filas, columnas, diagonales)” ;
    3. Tareas "Organizar los barcos para una batalla acuática " .
Para todos los problemas usaremos matrices de números enteros. Resolvemos problemas sobre matrices unidimensionales y bidimensionales - 1

Problemas que involucran matrices unidimensionales

continuar la secuencia

En esta serie de tareas necesitarás:
  1. Determine el patrón según el cual se forma tal o cual secuencia numérica.
  2. Escriba una función que forme los primeros N elementos de una secuencia determinada como una matriz de números enteros y muestre los elementos de la matriz en la pantalla.
Supongamos que nos enfrentamos a la tarea de continuar la siguiente serie numérica:

1, 2, 3, 4, 5…
Paso 1: Identifica el patrón. Aquí todo es elemental: es una serie de números naturales. Paso 2: escribe una función que formará los primeros N elementos de una fila determinada como una matriz:
public class Main {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(createArrayOfIntegers(10)));

        // Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }

    public static int[] createArrayOfIntegers(int n) {
        int[] array = new int[n];
        for (int i = 1; i <= n; i++) {
            array[i-1] = i;
        }

        return array;
    }
}
De manera similar, es necesario escribir funciones que continúen las siguientes secuencias:

A. 2,  4,  6,   8,  10...
B. 1,  3,  5,   7,   9...
C. 1,  4,  9,  16,  25...
D. 1,  8, 27,  64, 125...
E. 1, -1,  1,  -1,   1,  -1...
F. 1, -2,  3,  -4,   5,  -6...
G. 1, -4,  9, -16,  25....
H. 1,  0,  2,   0,   3,   0,  4....
I. 1,  2,  6,  24, 120, 720...
J. 1,  1,  2,   3,   5,   8, 13, 21…

Buscar elementos

En esta serie de tareas, es necesario encontrar un elemento en la matriz terminada que tenga algunas propiedades. Por ejemplo, el elemento con el valor máximo. Para demostrarlo, escribamos código para una función que tome una matriz y determine el índice del elemento máximo en la matriz, y luego envíe este elemento junto con su índice a la consola. También demostraré cómo, usando la clase, java.util.concurrent.ThreadLocalRandompuedes generar rápidamente una matriz de números enteros de una longitud determinada, que consta de elementos aleatorios:
public class Main {

    public static void main(String[] args) {
        int[] array = generateRandomIntArray(10);
        findMax(array);

        /*
        Output:
        Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
        Max element is [1822778873] with index [3]
        */

    }


    public static int[] generateRandomIntArray(int n) {
        int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
        System.out.println("Generated random array: " + Arrays.toString(array));
        return array;
    }

    public static void findMax(int[] array) {
        int maxIndex = 0;
        int max = array[maxIndex];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
                maxIndex = i;
            }
        }

        System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
    }
}
Ahora las tareas mismas. De una serie de elementos enteros aleatorios necesitamos encontrar:
  1. Máximo.
  2. Mínimo.
  3. Promedio.
  4. El número de elementos entre los elementos máximo y mínimo.
  5. El primer número primo.
  6. El último número primo.
  7. El número de números primos en la matriz.
Puede mostrar tanto el valor como los índices. Si no hay ningún elemento que esté buscando, muéstrelo en la pantalla a su conveniencia. Para la última tarea, necesitas preparar una serie de elementos enteros ordenados en orden ascendente. En esta matriz, necesita encontrar un elemento por valor en un número mínimo de operaciones ( Sugerencia ).

Clasificación

En esta serie de problemas, es necesario ordenar una matriz de elementos enteros utilizando varios algoritmos de clasificación. Hay bastantes materiales en Internet sobre varios algoritmos. Primero intente comprender la esencia del algoritmo y luego intente implementarlo usted mismo. Primero en papel (diagrama de bloques, pseudocódigo, lo que más te convenga) y luego en IDEA. Algoritmos de implementación:
  • ordenamiento de burbuja;
  • clasificación por selección;
  • tipo de inserción;
  • ordenar por fusión.

Problemas que involucran matrices bidimensionales.

dibujar la matriz

En la siguiente serie de tareas, es necesario dibujar (enviar a la consola) matrices bidimensionales (matrices) compuestas de cierta manera: deben corresponder al patrón especificado por la tarea. Dejame darte un ejemplo. Necesitamos construir y mostrar una matriz m*n(donde mes el número de filas y nes el número de elementos en la fila) de la forma:

1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Escribamos una función que haga todo por nosotros y también proporcionemos una función que envíe bellamente la matriz a la consola (puede que le resulte útil):
public class Main {

    public static void main(String[] args) {
        createAndDrawMatrix(3, 4);

    }

    public static void createAndDrawMatrix(int m, int n) {
        int[][] matrix = new int[m][n];

        int value = 1;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = value;
                value ++;
            }
        }

        printMatrix(matrix);
    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%3d", anInt));
            }
            System.out.println();
        }
    }
}
Ahora tareas: Mostrar una matriz m*nde la forma: 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1

Buscar elementos

En esta sección es necesario implementar una búsqueda de varios elementos en diferentes partes de la matriz: en una columna específica o en una fila específica. Supongamos que tenemos una matriz de la forma: -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35 Como ejemplo, encontremos el número de elementos negativos en la tercera fila:
public class Main {

    public static void main(String[] args) {
        int [][] matrix = {
                { -1,   2,   -3,    4,   -5,    6,   -7},
                {  8,  -9,   10,  -11,   12,  -13,   14},
                {-15,  16,  -17,   18,  -19,   20,  -21},
                { 22, -23,   24,  -25,   26,  -27,   28},
                {-29,  30,  -31,   32,  -33,   34,  -35}
        };

        findNegativeCountInRow(matrix, 3);
    }

    private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
        int negativeCount = 0;
        for (int element : matrix[rowNumber]){
            if (element < 0) {
                negativeCount ++;
            }
        }

        System.out.println("Matrix: ");
        printMatrix(matrix);
        System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));

    }

    public static void printMatrix(int[][] matrix) {
        for (int[] array : matrix) {
            for (int anInt : array) {
                System.out.print(String.format("%5d", anInt));
            }
            System.out.println();
        }
    }
}
Como resultado de ejecutar el método principal, se enviará lo siguiente a la consola:

Matrix: 
   -1    2   -3    4   -5    6   -7
    8   -9   10  -11   12  -13   14
  -15   16  -17   18  -19   20  -21
   22  -23   24  -25   26  -27   28
  -29   30  -31   32  -33   34  -35
Has 3 negative elements in #3 row 
Ahora las tareas. Para cualquier impar, nimprima una matriz n*nde la forma:

1,  -2,  3,  
-4,  5, -6,
7,  -8,  9
De esta matriz derivar:
  • todos los elementos negativos;
  • todos los elementos negativos de la cadena i;
  • todos los elementos negativos de la columna j;
  • todos los elementos diagonales (comenzando desde la esquina superior izquierda);
  • todos los elementos diagonales (comenzando desde la esquina inferior izquierda).

Batalla naval

Última sección con un asterisco: sin consejos ni ejemplos. Las matrices son ideales para programar el juego de batalla naval. Una de las etapas de la programación de este juego es la colocación de barcos en el campo de juego. Si resuelves algunos de estos problemas, ten la seguridad de que podrás afrontar el combate naval. Entonces, dada una matriz de 10x10 formada por ceros. Supongamos que es un campo para disputar una batalla naval. En este campo, 0 es una celda vacía, 1 es un barco o parte de un barco. Escribe funciones, cada una de las cuales, de acuerdo con las reglas del juego de batalla naval, las coloca al azar:
  • 10 barcos de un solo piso;
  • 10 corbales de dos pisos;
  • 5 barcos de tres pisos;
  • Organiza todos los barcos para el juego de batalla naval (4 de un solo piso, 3 de dos pisos, 2 de tres pisos, 1 de cuatro pisos).
¡Eso es todo! Como ocurre con cualquier tema de programación, la mejor manera de aprender los arreglos es mediante la práctica. ¡Feliz calentamiento!
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION