海盗分金币编程海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己的号码(1,2,3,4,5) 2.首先,由1号提出分配方案,然后大家5人进行表决
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/03 02:37:52
海盗分金币编程海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己的号码(1,2,3,4,5) 2.首先,由1号提出分配方案,然后大家5人进行表决
海盗分金币编程
海盗分金的故事
5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.
他们决定这么分:
1.抽签决定自己的号码(1,2,3,4,5)
2.首先,由1号提出分配方案,然后大家5人进行表决,当且超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼.
3.如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼.
4.依次类推.
第一个海盗提出怎样的分配方案才能够使自己的收益最大化
条件:每个海盗都是很聪明的人,如果前面的人提出的方案对自己没好处肯定会否决,如果好处比后面持续下去的方案好就投票.
请用VB或Pascal语言编程,如果能推广到100人追加100分
不要抄袭
海盗分金币编程海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己的号码(1,2,3,4,5) 2.首先,由1号提出分配方案,然后大家5人进行表决
由题可知:当只有2人时,4号可以得到一切.所以只有3人时,只要3号给点点好处,5号会支持他,4号必定反对.所以只有4人时候,4号只有有一点点处必定支持,有了4号支持即可通过,另外的人没有好处.所以,3号5号在一开始,只要得到一点点好处就会支持.于是若金币不可分割,自己98个,3号5号各1个即可.
上边是自然语言,如果用程序语言,明显的,不能用推理.只能穷举,而且可能用到递归函数.这里给出思路:
前提:1.分给他人的都是1或0元(理由略).2.有一个函数find(a),a代表剩余人数.用于判断剩余这个人数时,提出分配方案者的利益是多少.这里给出find代码:
private find(a) as integer
dim b as integer
k(a)=1'自己会支持自己
b=0' 反对者数目
if a=5 then
find=100
else
for i=1 to 4
if a+i1 and (i mod 2 =1) then '如果下i个人,i为奇数能得到更大的利益,他会无条件反对你
b=b+1
k(a-i)=0
end if
end if
next i
find=100-b
if a=1 then
print "自己得到:"
print 100-b
print “其他得1元的人:”
for i=2 to 5
if k(i)=1 then
print i
end if
next i
end if
'没试过,应该有问题.