智力题:5个强盗分100个金币

博客介绍了如何使用递归方法解决一个智力问题:5个强盗要公平地分配100枚金币。通过将问题转化为求解剩余强盗的分配,博主分享了具体的代码实现。
摘要由CSDN通过智能技术生成
本文用递归方法解决一个智力题。题目如下: 5 个强盗分 100 个金币,如果第一个人提出的分配方案得到半数以上(含半数)的人同意则执行,否则处死第一个人,再由第二个人提出方案,直到分配完成。第一个人提出怎样的方案才能既获得最大利益又没有杀身之祸?这里假设每个人都是理性的且追求最大的利益。

    第 1 提出的分配方案要满足两个条件,一是得到半数以上的人支持。二是使自己获得最大的利益。为了取得别人的支持需要给他们部分利益,显然这部分利益要超过他们在第 2 个人提出的可接受分配方案中所获得的利益。如果不这样,他们会反对,从而接受第 2 个人提出的方案。
    问题变成了求第 2 个人提出的可接受方案。他的方案也要满足上面的两点。 以此类推,问题变成最后一个人提出可接受方案,显然可以提可接受的方案,因为没有人反对,把金币全部分给自己。

下面是他们的方案:
第5个人的方案 0 0 0 0 100 。(不需要别人的支持)
第4个人的方案 0 0 0 100 0 (不需要别人的支持)
第3个人的方案: 0 0 99 0 1 。(第5个人会支持他)
第2个人的方案: 0 99 0 1 0 。(第4个人会支持他)
第1个人的方案: 98 0 1 0 1 。(第3,5个人会支持他)

    从分析中可得,这个问题可以用递归求解,把求n个人的分配问题变成求n-1个人的分配,实现代码如下。

#include  < vector >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值