Este artículo considerará (y, en mayor medida, proporcionará un análisis independiente) problemas que involucran matrices. Mejoraremos nuestras habilidades en las siguientes áreas:
Problemas que involucran matrices unidimensionales
continuar la secuencia
En esta serie de tareas necesitarás:- Determine el patrón según el cual se forma tal o cual secuencia numérica.
- 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.
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.ThreadLocalRandom
puedes 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:
- Máximo.
- Mínimo.
- Promedio.
- El número de elementos entre los elementos máximo y mínimo.
- El primer número primo.
- El último número primo.
- El número de números primos en la matriz.
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 matrizm*n
(donde m
es el número de filas y n
es 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*n
de 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, n
imprima una matriz n*n
de 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).
GO TO FULL VERSION