Вы находитесь на странице: 1из 2

/*

Se tiene una matriz de enteros de tamanio 4*20 de secuencias de numeros entre 1


y 9 (por cada fila), separadas por 0.
La matriz esta precargada, y ademas cada fila empieza y termina con uno o mas
separadores 0.
Se pide realizar un programa que:
_elimine de cada fila la secuencia cuya suma de valores sea mayor.
*/

import java.util.Random;
public class Segundo_ejercicio{
public static final int MAXFILA = 4;

public static final int MAXCOLUMNA = 20;

public static final int MAX = 20;

public static final int MAXVALOR = 10;

public static final int MINVALOR = 1;

public static final double probabilidad_numero = 0.4;

public static void main(String[] args) {


int[][] matint = new int[MAXFILA][MAXCOLUMNA];

cargar_matriz_aleatorio_secuencias_int(matint);
imprimir_matriz_int(matint);
eliminar_secuencias_mayor(matint);
System.out.println("--------------------------------");
imprimir_matriz_int(matint);
}

public static void cargar_matriz_aleatorio_secuencias_int(int[][] mat) {


for (int fila = 0; fila < MAXFILA; fila++) {
cargar_arreglo_aleatorio_secuencias_int(mat[fila]);
}
System.out.println("");
}

public static void cargar_arreglo_aleatorio_secuencias_int(int[] arr) {


Random r = new Random();
arr[0] = 0;
arr[MAX - 1] = 0;
for (int pos = 1; pos < MAX - 1; pos++) {
if (r.nextDouble() > probabilidad_numero) {
arr[pos] = (r.nextInt(MAXVALOR - MINVALOR + 1) + MINVALOR);
} else {
arr[pos] = 0;
}
}
}

public static void imprimir_matriz_int(int[][] mat) {


for (int fila = 0; fila < MAXFILA; fila++) {
System.out.print("|");
for (int columna = 0; columna < MAXCOLUMNA; columna++) {
System.out.print(mat[fila][columna] + "|");
}
System.out.println("");
}

}
public static void eliminar_secuencias_mayor(int[][] mat) {
for (int fila = 0; fila < MAXFILA; fila++) {
eliminar_secuencias_fila(mat[fila]);
}
}

public static void eliminar_secuencias_fila(int[] arr) {


int inicio, fin,suma;
int mayorSuma = 0;
inicio = 0;
fin = -1;
while (inicio < MAX - 1) {
inicio = buscar_posicion_inicio(arr, fin + 1);
if (inicio < MAX - 1) {
fin = buscar_posicion_fin(arr, inicio);
suma = obtener_suma(arr, inicio, fin);
if (suma > mayorSuma) {
mayorSuma = suma;
corrimiento_izq(arr, inicio, fin);
}
}
}
}

public static int buscar_posicion_inicio(int[] arr, int pos) {


while ((arr[pos] == 0) && (pos < MAX - 1)) {
pos++;
}
return pos;
}

public static int buscar_posicion_fin(int[] arr, int pos) {


while ((arr[pos] != 0) && (pos < MAX - 1)) {
pos++;
}
return (pos - 1);
}

public static void corrimiento_izq(int[] arrenteros, int inicio, int entero) {


while (entero > 0) {
for (int pos = inicio; pos < MAX-1; pos++) {
arrenteros[pos] = arrenteros[pos + 1];
}
entero--;
}
}

public static int obtener_suma(int[] arr, int inicio, int fin) {


int suma = 0;
for (int i = inicio; i <= fin; i++) {
suma += arr[i];
}
return suma;
}
}

Вам также может понравиться