PDA

Ver la versión completa : [Programación] Practica friki de algoritmos voraces (Java)



Kurraudo
24/11/2009, 10:22
Atención a la práctica de ADA que me acaban de mandar a hacer ahora:


* Una horda de orcos ha desembarcado para atacar Rivendel (ciudad protegida por los elfos), Elron necesita definir una estrategia de contraataque en el menor tiempo posible, por lo que decide utilizar una técnica voraz.

* Elron tiene información sobre los grupos en los que se han dividido los orcos (n) y cuántos orcos hay en cada uno de los grupos.

* Elron tiene también disponibles n grupos de elfos para contraatacarlos. (Dispone de igual número de grupos de elfos que de orcos)

* Elron tendrá que decidir qué grupo de aliados se enfrenta a qué grupo de orcos con una técnica voraz para obtener el mayor número de victorias. Para ello hay que tener en cuenta que una batalla será ganada si el número de aliados es mayor o igual que el número de orcos.

* Tenemos que modelar dos tipos de vértices: uno para los elfos (GrupoElfos), y otro para los orcos (GrupoOrcos). Ambas interfaces tendrán un método para consultar el número de seres de cada grupo.

* La interfaz DatosSenorAnillos tendrá dos métodos para consultar los grupos de orcos y elfos que conforman el problema.

[...]

¿Acaso ahora todos los infromáticos somos frikis de ESDLA? A ver si ha sido cosa del "Aula de Cultura"... :lol:

PD: Ahora una pregunta ¿Cómo haríais para implementar en java el siguiente algoritmo (http://bulbapedia.bulbagarden.net/wiki/Catch_rate)? Tengo aquí una clase inacabada:


public class CapturaImpl {
public int HPmax;
public int HPactual;
public int RatioCaptura;
public int RatioBola;
public int BonusEstado;

public int CapturaInicial(){
int a = (((3*HPmax-2*HPactual)*RatioCaptura*RatioBola)/(3*HPmax))*BonusEstado;
return a;
}

public String CapturaFinal(int a){
String res="Capturado";
int b=0;
if(a<255){
b=(int) (1048560/(Math.sqrt(Math.sqrt(16711680/a))));
int ran1 = (int) (Math.random()*65535);
int ran2 = (int) (Math.random()*65535);
int ran3 = (int) (Math.random()*65535);
int ran4 = (int) (Math.random()*65535);
if (!(ran1<b && ran2<b && ran3<b && ran4<b)){
res="No capturado";
//TODO Posibilidad de que la bola se sacuda n veces
}
}
return res;
}
}
...pero me gustaría saber cómo hacerla al completo (si necesito corregir algo de código decidme), e implementar el método main que haga uso de esta clase. Es por practicar un poco y por curiosidad :D