Pregunta

Dos armas A y B deben usarse para matar a un monstruo (con N cabezas). Cuando se usa Gun A, corta 6 cabezas, pero si el monstruo no muere (no de cabezas> 0), crecerá 3 cabezas. Cuando se usa la pistola B corta 4 cabezas, pero si el monstruo no muere, crece 2 cabezas. Si n <(no. De las cabezas puede cortar la pistola), en ese caso la pistola no se puede usar. Y si n = -1, tanto el monstruo como el cazador mueren.

El problema requiere descubrir si es posible matar al monstruo, si el cazador muere tratando de matar al monstruo y al camino más corto.

He escrito el siguiente programa Python para resolver el problema anterior:

def A(heads, path):
    if heads < -1:
        path = []
        return "Impossible to kill"    
    heads -= 6
    path.append("A")
    if heads == 0:
        print path
        path = []
        return "Monster dies"
    if heads == -1:
        return "Both monster and human die"
    heads += 3
    if A(heads, path)=="Monster dies" or B(heads, path) == "Monster dies":
        return "Monster dies"
def B(heads, path):
    if heads < -1:
        path = []
        return "Impossible to kill"
    #print "B", path, heads
    heads -= 4
    path.append("B")
    if heads == 0:
        print path
        path =[]
        return "Monster dies"
    if heads == -1:
        return "Both monster and human die"
    heads += 2
    if A(heads, path)=="Monster dies" or B(heads, path) == "Monster dies":
        return "Monster dies"

print A(10, [])  

Datos de muestra (proporcionados por la pregunta): para n = 10, la ruta más corta es AAB.

¿En qué parte del programa me he equivocado y qué es un mejor método para pasar por este problema?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top