Dev - C++ - a ver quien se le mide me lo pusieron en una entrevista y quede azul

   
Vista:

a ver quien se le mide me lo pusieron en una entrevista y quede azul

Publicado por fabian (1 intervención) el 22/10/2014 05:25:29
Existen tres jugadores experimentados en duelos del lejano oeste: Andrés, Bairon, Carlos. Estos jugadores tienen una disputa acerca de quién es el mejor. Para resolver esta disputa, ellos se retan a un duelo a muerte!.

Andrés es un tirador poco experimentado y solo puede atinar en el blanco con una probabilidad de 0.4. Bairon es un poco mejor que Andrés y atina en el blanco con una probabilidad de 0.5. Carlos es el más experto con una precisión de 0.9. Recibir un disparo significa la muerte y la persona baleada debe salir del juego. Adicionalmente, cada bala tiene un valor de 1 dólar.

Para compensar las desigualdades en habilidades, se decide que los participantes van a disparar en secuencia: Andrés, Bairon y Carlos. El ciclo se repetirá hasta que una persona quede de pie y esta persona será el ganador. A continuación se dan alguna sugerencias para facilitar el desarrollo de la prueba:

a. Escriba una función que simule un ataque de único disparo. Utilice la siguiente declaración:

void atacar(bool& participanteVivo, double precision);

Esta función debe simular a un jugador que ataca a un blanco vivo (participanteVivo) utilizando la precisión asociada al jugador. El resultado del ataque será calculado generando un número aleatorio en el rango 0 y 1. Si el número aleatorio es menor que la precisión del jugador, entonces, el blanco es alcanzado y participanteVivo debe pasar a valer falso (0). Observe la Fig. 2 para la generación del número aleatorio.

Por ejemplo, si Bairon le dispara a Carlos, esto es invocado como
atacar(carlosVivo, 0.5)
Note que carlosVivo es una variable booleana que indica si Carlos está vivo. (Se recomienda probar la función antes de implementar la fase (b))

b. Estrategia 1. Una estrategia seguida por cada competidor es disparar al contrincante de mayor habilidad. Escriba una segunda función con nombre simularDuelo, esta función se encarga de simular un duelo completo utilizando la estrategia descrita y debe utilizar una función llamada atacar. La función simularDuelo debe iterar hasta que solo un contrincante quede vivo; en cada iteración debe invocar la función atacar con el blanco apropiado y con la probabilidad de acierto del jugador que está disparando. La función debe retornar una variable que indique quien ganó el duelo.

c. En la función principal, invoque la función simularDuelo 1000 veces, lleve un registro de cuantas veces gana cada contrincante y de cuánto dinero gasta en balas cada contrincante. Despliegue la probabilidad de que cada contrincante gane cuando se utiliza la estrategia de disparar al competidor de mayor habilidad. Adicionalmente, debe desplegar el dinero que cada concursante gastó en balas, en porcentaje (esta última información no está ilustrada en la Fig. 3).

d. Estrategia modificada. Debido a la superioridad de habilidades de Bairon y Carlos, Andrés decide comprar un chaleco antibalas. Este chaleco permite que Andrés sobreviva al primer disparo, sin embargo, su precisión se reduce a 0.3 como efecto colateral del disparo recibido. Implemente esta nueva estrategia de simulación y despliegue la probabilidad de ganar de cada participante.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder