Domanda

Due pistole A e B devono essere usate per uccidere un mostro (con n teste). Quando viene utilizzata la pistola A taglia 6 teste, ma se il mostro non muore (no di teste> 0), farà crescere 3 teste. Quando viene utilizzata la pistola B taglia 4 teste ma se il mostro non muore cresce 2 teste. Se n <(n. Di testa la pistola può tagliare), in quel caso la pistola non può essere utilizzata. E se n = -1, sia il mostro che il cacciatore muore.

È necessario dal problema per scoprire se è possibile uccidere il mostro, se il cacciatore muore cercando di uccidere il mostro e il percorso più breve.

Ho scritto il seguente programma Python per risolvere il problema sopra:

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, [])  

Dati di esempio (forniti dalla domanda): per n = 10, il percorso più breve è AAB.

Dove nel programma sono andato storto e qual è un metodo migliore per affrontare questo problema?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top