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:" p>
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. .