Red de conocimiento informático - Conocimiento sistemático - Programación para compartir monedas de oro pirata

Programación para compartir monedas de oro pirata

Se puede ver en la pregunta: cuando solo hay 2 personas, el número 4 puede conseguirlo todo. Entonces, cuando solo hay 3 personas, siempre que el No. 3 brinde algunos beneficios, el No. 5 lo apoyará y el No. 4 definitivamente se opondrá. Entonces, cuando solo hay 4 personas, el No. 4 solo apoyará un poco. Con el apoyo del No. 4, puedes pasar y las otras personas no se beneficiarán. Por lo tanto, los números 3 y 5 apoyarán a los números 3 y 5 siempre que obtengan un pequeño beneficio. Entonces, si las monedas de oro son indivisibles, 98 para ti y una para las números 3 y 5 serán suficientes.

Lo anterior es lenguaje natural. Si usa un lenguaje de programación, es obvio que no se puede usar el razonamiento. Sólo se puede hacer de forma exhaustiva y se pueden utilizar funciones recursivas. Aquí hay algunas ideas:

Premisa: 1. Todo el dinero que se entrega a otros es 1 o 0 yuanes (se omite el motivo). 2. Hay una función encontrar (a), a representa el número restante de personas. Cuando se utiliza para juzgar el número restante de personas, cuál es el beneficio de la persona que propone el plan de distribución. El código de búsqueda se proporciona aquí:

búsqueda privada(a) como entero

dim b como entero

k(a)=1'Me mantendré solo

b=0' Número de oponentes

si a=5 entonces

find=100

si no

para i=1 a 4

si a ilt;=5 entonces

si find(a i)gt;1 y (i mod 2 =1) entonces 'Si i persona es A continuación, si i es un número impar, puedes obtener mayores beneficios y él se opondrá a ti incondicionalmente

b=b 1

k(a-i)=0

finalizar si

finalizar si

p>

finalizar si

siguiente i

find=100-b

si a=1 entonces

imprime "self Get: "

imprime 100-b

imprime "Otras personas que obtuvieron 1 yuan:"

para i=2 a 5

si k(i)=1 entonces

imprimir i

finalizar si

siguiente

fin si

'No lo he probado, debería haber un problema. .