Sie sind auf Seite 1von 3

Dividir para Conquistar

Ejercicios de entretenimiento:

1. Suponga que se ingresa una palabra y una letra por consola, utilice dividir para conquistar para calcular el
nmero de ocurrencias de dicha letra en la palabra.

Ejemplo:

palabra: lavanda letra: a N de ocurrencias: 3 Tip: Use charAt(i).

Solucin:
public static int ocurrencias(String palabra, char letra){
if (palabra.length() > 0){
return ocurrencias(palabra, letra, 0, palabra.length() - 1);
}
return 0;
}

private static int ocurrencias(String palabra, char letra, int i, int j){
if (i == j){
if (palabra.charAt(i) == letra){
return 1;
}
return 0;
}
int mitad = (i + j)/2;
int ocuIzq = ocurrencias(palabra, letra, i, mitad);
int ocuDer = ocurrencias(palabra, letra, mitad + 1, j);
return ocuIzq + ocuDer;
}

2. Modifique el ejercicio anterior de tal forma que calcule el porcentaje entre la cantidad de veces que est la
letra en la palabra y la cantidad de letras de la palabra. No es necesario que el porcentaje sea un nmero
decimal.

Ejemplo:

palabra: lavanda letra: a Porcentaje: 42%

Solucin:

Se agrega una nueva funcin que utiliza la funcin pblica ocurrencias.


public static int probabilidad(String palabra, char letra){
if (palabra.length() > 0){
return 100 * ocurrencias(palabra, letra) / palabra.length();
}
return 0;
}
3. Suponga que represent el costo de adquirir el juego Age of Empires II de diferentes tiendas y regiones en
una matriz de NxM, donde N representa el nmero de tiendas y M representa el nmero de regiones.
Utilizando dividir para conquistar, encuentre el menor costo de adquirir dicho juego.

Solucin:
public static int costoMenor(int[][] costos){
if (costos.length > 0){
return costoMenor(costos,
0, costos.length - 1,
0, costos[0].length - 1);
}
return 0;
}

private static int costoMenor(int[][] costos,


int rowi, int rowj,
int coli, int colj){
//De 1x1
if (rowi == rowj && coli == colj){
return costos[rowi][coli];
}
//De 1x2 o de 2x1
if ( (rowi == rowj && coli == colj - 1) ||
(rowi == rowj - 1 && coli == colj) ){
int costo1 = costos[rowi][coli];
int costo2 = costos[rowj][colj];
if (costo1 < costo2){
return costo1;
}
return costo2;
}
//De 2x2 o mayor.
int mitadrow = (rowi + rowj)/2;
int mitadcol = (coli + colj)/2;
int costoSupIzq = costoMenor(costos, rowi, mitadrow, coli, mitadcol);
int costoSupDer = costoMenor(costos, rowi, mitadrow, mitadcol + 1, colj);
int costoInfIzq = costoMenor(costos, mitadrow + 1, rowj, coli, mitadcol);
int costoInfDer = costoMenor(costos, mitadrow + 1, rowj, mitadcol + 1, colj);
//Aqu se juntan y se comparan
if (costoSupIzq < costoSupDer && costoSupIzq < costoInfIzq &&
costoSupIzq < costoInfDer){
return costoSupIzq;
}
if (costoSupDer < costoInfIzq && costoSupDer < costoInfDer){
return costoSupDer;
}
if (costoInfIzq < costoInfDer){
return costoInfIzq;
}
return costoInfDer;
}
Ejemplo de llamado en el Main:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Ingrese Palabra: ");
String palabra = sc.nextLine();
System.out.print("Ingrese letra: ");
char letra = sc.nextLine().charAt(0);

int ocu = ocurrencias(palabra, letra);


System.out.println("N Ocurrencias: " + ocu);

int prob = probabilidad(palabra, letra);


System.out.println("Probabilidad: " + prob + "%");

int[][] costosAOE2 = { {15000, 12000, 16000, 20000, 35000},


{18000, 15000, 16000, 13000, 14000},
{26000, 11000, 17000, 18000, 19000},
{30000, 17000, 12000, 10000, 22000},
};
int costo = costoMenor(costosAOE2);
System.out.println("El costo menor de AOE2 es: " + costo);
}