经典推理题——海盗分金子

2024-04-30 20:48
文章标签 经典 推理题 金子 海盗

本文主要是介绍经典推理题——海盗分金子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数学的逻辑有时会导致看来十分怪异的结论。一般的规则是,如果逻辑推理没有漏洞,那么结论就必定站得住脚,即使它与你的直觉矛盾。

  这是一道已经流传了至少十年难题

  10名海盗抢得了窖藏的100块金子,并打算瓜分 这些战利品。这是一些讲民主的海盗(当然是他们自己特有的民主),他们 的习惯是按下面的方式进行分配:最厉害的一名海盗提出分配方案,然后所 有的海盗(包括提出方案者本人)就此方案进行表决。如果50%或更的海盗 赞同此方案,此方案就获得通过并据此分配战利品。否则提出方案的海盗将 被扔到海里,然后下提名最厉害的海盗又重复上述过程。

  所有的海盗都乐于看到他们的一位同伙被扔进海里,不过,如果让他们选择 的话,他们还是宁可得一笔现金。他们当然也不愿意自己被扔到海里。所有 的海盗都是有理性的,而且知道其他的海盗也是有理性的。此外,没有两名 海盗是同等厉害的——这些海盗按照完全由上到下的等级排好了座次,并且 每个人都清楚自己和其他所有人的等级。这些金块不能再分,也不允许几名 海盗共有金块,因为任何海盗  都不相信他的同伙会遵守关于共享金块的安排。 这是一伙每人都只为自己打算的海盗。

  最凶的一名海盗应当提出什么样的分配方案才能使他获得最多的金子呢?

  为方便起见,我们按照这些海盗的怯懦程度来给他们编号。最怯懦的海盗为 1号海盗,次怯懦的海盗为2号海盗,如此类推。这样最厉害的海盗就应当得 到最大的编号,而方案的提出就将倒过来从上至下地进行。

  分析所有这类策略游戏的奥妙就在于应当从结尾出发倒推回去。游戏结束时, 你容易知道何种决策有利而何种决策不利。确定了这一点后,你就可以把它 用到倒数第2次决策上,如此类推。如果从游戏的开头出发进行分析,那是 走不了多远的。其原因在于,所有的战略决策都是要确定:“如果我这样做, 那么下一个人会怎样做?”因此在你以下海盗所做的决定对你来说是重要的, 而在你之前的海盗所做的决定并不重要,因为你反正对这些决定也无能为力 了。

  记住了这一点,就可以知道我们的出发点应当是游戏进行到只剩两名海盗—— 即1号和2号——的时候。这时最厉害的海盗是2号,而他的最佳分配方案是一 目了然的:100块金子全归他一人所有,1号海盗什么也得不到。 由于他自己 肯定为这个方案投赞成票,这样就占了总数的50%,因此方案获得通过。

  现在加上3号海盗。1号海盗知道,如果3号的方案被否决,那么最后将只剩2 个海盗,而1号将肯定一无所获——此外,3号也明白1号了解这一形势。因此, 只要3号的分配方案给1号一点甜头使他不至于空手而归,那么不论3号提出什 么样的分配方案,1号都将投赞成票。因此3号需要分出尽可能少的一点金子 来贿赂1号海盗,这样就有了下面的分配方案:3号海盗分得99块金子,2号海 盗一无所获,1号海盗得1块金子。

  4号海盗的策略也差不多。他需要有50%的支持票,因此同3号一样也需再找一 人做同党。他可以给同党的最低贿赂是1块金子,而他可以用这块金子来收买 2号海盗。因为如果4号被否决而3号得以通过,则2号将一文不名。因此,4号 的分配方案应是:99块金子归自己,3号一块也得不到,2号得1块金子,1号 也是一块也得不到。

  5号海盗的策略稍有不同。他需要收买另两名海盗,因此至少得用2块金子来贿 赂,才能使自己的方案得到采纳。他的分配方案应该是:98块金子归自己,1 块金子给3号,1块金子给1号。

  这一分析过程可以照着上述思路继续进行下去。每个分配方案都是唯一确定的, 它可以使提出该方案的海盗获得尽可能多的金子,同时又保证该方案肯定能通 过。照这一模式进行下去,10号海盗提出的方案将是96块金子归他所有,其他 编号为偶数的海盗各得1块金子,而编号为奇数的海盗则什么也得不到。这就解 决了10名海盗的分配难题。

这篇关于经典推理题——海盗分金子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949885

相关文章

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

接口自动化三大经典难题

目录 一、接口项目不生成token怎么解决关联问题 1. Session机制 2. 基于IP或设备ID的绑定 3. 使用OAuth或第三方认证 4. 利用隐式传递的参数 5. 基于时间戳的签名验证 二、接口测试中网络问题导致无法通过怎么办 1. 重试机制 2. 设置超时时间 3. 使用模拟数据 4. 网络问题的预检测 5. 日志记录与错误分析 6. 切换网络环境 7.

嵌入式面试经典30问:一

什么是嵌入式系统? 嵌入式系统是指嵌入到某个对象体系中的专用计算机系统,它负责执行特定的任务,具有专用性、隐蔽性、资源受限和可靠性要求高等特点。通常包括硬件和软件两部分,硬件以微处理器为核心,软件则负责控制和管理硬件资源,实现特定的应用功能。 嵌入式系统和普通计算机系统有什么区别? 嵌入式系统与普通计算机系统的主要区别在于目的、资源、性能和成本等方面。嵌入式系统通常针对特定应用设计,具有体积小

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 理论上提交这个就是最优解 字节考过不下20次,这个高居字节面试榜第9名 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) {

整理的经典面试题及各种库函数的自己实现

进程间通信方式 管道(有名管道,无名管道),共享内存,消息队列,信号量,socket通信 线程同步方式 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问 互斥量:为协调共同对一个共享资源的单独访问而设计 信号量(PV操作):为控制一个具有有限数量用户资源而设计 事件:用来通知线程有一些事件已 进程和线程的区别 资源:进程是拥有资源的一个独立单位,线程是

性能测试经典案例解析——政务查询系统

各位好,我是  @道普云 一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。 欢迎关注我的主页 @道普云 文章内容具有一定门槛,建议先赞再收藏慢慢学习,有不懂的问题欢迎私聊我。 希望这篇文章对想提高软件测试水平的你有所帮助。 政务查询系统的用户量相对来说是比较小的,但是它的复杂性和对实时性的要求是比较高的,我们以一个主要提供单位信息业务复杂查询功能的