作业帮 > 综合 > 作业

海盗分金币编程海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 06:49:39
海盗分金币编程
海盗分金的故事
5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.
他们决定这么分:
1.抽签决定自己的号码(1,2,3,4,5)
2.首先,由1号提出分配方案,然后大家5人进行表决,当且超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼.
3.如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼.
4.依次类推.
第一个海盗提出怎样的分配方案才能够使自己的收益最大化
条件:每个海盗都是很聪明的人,如果前面的人提出的方案对自己没好处肯定会否决,如果好处比后面持续下去的方案好就投票.
请用VB或Pascal语言编程,如果能推广到100人追加100分
不要抄袭
由题可知:当只有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
'没试过,应该有问题.
再问: 问题很大。。。 其中一个:如果A比B给C多,C会支持A,A不一定给1可以给2。 还有当只有2人时,5号可以得到一切。因为5号只要反对4号,就未超过半数,4号会死且5号独吞。所以4号必须同意3号(如果只有3个人,即使3号给4号0)那方案就会有2票通过
再答: 首先B不会给C因为C无论如何也不会支持他(他们都是聪明人),因为只要B下台C能获得99更大。理由见原回答。你原文所述 “当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。”所以半数时是通过的,4号可以全给自己,自己同意就半数了。
海盗分金币编程海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己 海盗分赃5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城.他们决定这么分:1、抽签决定自己的号码(1、2、3、4 IQ题征答5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城 他们决定这么分:1.抽签决定自己的号码(1,2,3, 一个思考题!..5个海盗抢到了60颗宝石,每一颗都一样的大小和价值连城.他们决定这么分:1.抽签决定自己的号码(1.2. 超级智力测试5个海盗抢到了100颗宝石,每一颗都一样大小且价值连城.他们决定这么分:(1)抽签决定自己的号码(1~5); 5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城.他们决定这么分: ^U,Bkd 5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城.他们决定这么分: 10个海盗抢到了100颗宝石,每一颗都一样大小且价值连城.他们决定这么分: 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城.他们决定这么分: 求一道推理题答案5个海盗抢到100颗宝石,每一颗都是一样大小,而且价值连城,他们决定这么分1 抽签决定自己号码 1 2 5个海盗抢得100枚金币,他们决定这么分:1.抽签决定自己的号码(1,2,3,4,5)2.首先由海盗(1)提出一个分配方 5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城.