Toad趣题:说真话的程序员 & 不说实话的经理

FBI包围了诺恩公司的总部。里面总共有n个人。每个人不是工程师就是经理。机密文件已经被销毁,只有经理掌握。现在FBI要分辨他们。只能问i:“j是什么身份”。诺恩中每个人相互都知道身份。工程师只说真话;经理并不总是说真话,而且都足够狡猾,想尽方法迷惑FBI。(这个设定还是比较有意思的 :P)

1 假如一半以上的人都是工程师,是否有一个策略,用最多n-1次提问找到一个工程师。

2 假如有至少一半的人是经理,是否能找到一个工程师。

3 一旦找到了一个工程师,通过他可以认清其他人的身份。是否可以用更少的询问来达到目标。

4如果要确定所有人的身份,最少需要多少次询问

第一问,n-1次是一个限制比较苛刻的条件。不妨先把这个条件放松,不限制询问次数。注意到有一半以上的人说真话,那么问一遍所有人:第i个人是E(工程师)还是M(经理)。肯定有一半以上的人的答案是相同的,并且就是i的身份。通过这种方式,可以找出所有人的身份。

那么如何仅仅使用n-1次询问来达到目的呢?先放一放,看下面的。

第二问。让我们把问题特殊化:如果有2个人,一个是M,一个E。是否能找出各自的身份呢?答案是否定的。

首先注意到这样一个事实,如果询问i本人是什么身份,他如果是E,只会回答自己是E;他如果是M,可能回答的是E或M。但是M没有那么傻,如果他说自己是M,那么他一定是M;只有他说自己是E,我们才无法判断他的身份。所以询问某个人他自己的身份这样的问题是多余的。

在2个人的情况下,容易想到M的策略:是说对方是M。由于E说实话,他一定说对方是M。所以两个人都说对方是M,自己是E,我们没法判断谁是谁。

如果是任意偶数个人的情况,E和M是一半对一半。经理的策略总是说自己是工程师,对方人是经理;工程师说实话,也是这么说。我们可以知道哪些人是一个阵营,但却无法分辨出他们的阵营。

然后考虑有3个人的情况,E和M是1:2。这时候工程师1总是说其他人是M。经理2可以说其他人是M,经理3按照同样的策略。在外人看来,任何人都可以是E,其他人是M。所以我们无法判断。

如果有任意个人,策略可以有很多种:每个经理都可以说其他人是M,产生工程师只有一个的可能。这样我们就不知道工程师到底有几个。例如2:5的情况,经理3,4,5都说自己以外的所有人是M;工程师1、2说自己都是E,其他人是M。7个人中分成了4个阵营『1,2』『3』『4』『5』,相同阵营中的人身份是一致的,但是我们无法判断哪个阵营是E。

因此第二问的回答是否定的。

真正有复杂的是第一问。因为有次数限制。

人员按1到n。先把第一个人放到队列的开头。从第二个人开始,询问他队列最后一个人的身份。如果他回答是E,把他加到队列的最后;如果他的回答是M,把他和队列最后的一个人排除掉。通过n-1次询问,整个队列最开头的那个人一定是E。

注意到这样的事实:

1)如果整个过程当中有一半的人,或以上,说某个人是E,那么这个人确实就是E。

2)如果i说j是M,那么有可能出现  i是M,j是M;i是E,j是M;i是M,j是E。总之要么两个人都是M,要么有一个人M。如果把这两个排除,剩下的人的当中还是保持了有一半的人以上是E。

3)如果i认为j是E,那么i认可j所有的判断。如果有n个人,第2个人说第1个人是E,第3个人说第2个人是E……第n个人说n-1个人是E,那么所有人都认为第1个人是E。这就形成了一个“真话队列”。这个真话队列当中有一半以上的人是E,那么第一个人就是E

4)在以上的过程当中,我们就是维持这样一个真话队列,而且有一半以上的人是E。

因此上述算法是正确的

时间: 2024-11-05 22:50:00

Toad趣题:说真话的程序员 & 不说实话的经理的相关文章

【产品】程序员如何和产品经理沟通01——产品经理的能力模型

简介  作为一只从技术转向产品的程序猿,和大家分享一下产品经理的一些要素.一方面给各位程序猿参考一下,所谓知己知彼,方便以后和产品汪们优雅地撕逼:另一方面,如果有想从技术转产品的程序猿也可以作为参考. 都说程序猿最大的“敌人”就是产品汪,其实很多从技术转向产品的人都非常怀念当程序猿的时光,这是为什么呢? 看了一个产品经理的能力模型,你们就知道做好产品经理其实是非常不容易的,能力模型特别分散,触角伸的特别多,需要跨领域的各种技能,不像程序猿只需要关注IT技术即可.如果说一个程序猿需要经常学习IT新

程序员可以兼任项目经理吗?

人们的有些尝试从来没有成功过:接到一个小项目,项目小,完全不需要一个全职的项目经理.于是就决定让一个程序员兼任项目经理.毕竟,还能有谁比程序员更清楚应该写出一个什么样的程序? 的确,很多程序员能做好项目经理的职位.好的程序员和好的项目经理的之间没有本质的冲突.这两个职位都是面向细节和面向结果的.但是一个人不可能同时做好这两个工作. 为了理解这种不兼容性,必须认识程序员和项目经理工作任务的类型. 开发软件需要进入一种沉浸状态,为了更加有效率,程序员必须完全进入代码世界,来专注于操作算式和变量,预见

程序员可以兼任项目经理吗?

人们的有些尝试从来没有成功过:接到一个小项目,项目小,完全不需要一个全职的项目经理.于是就决定让一个程序员兼任项目经理.毕竟,还能有谁比程序员更清楚应该写出一个什么样的程序? 的确,很多程序员能做好项目经理的职位.好的程序员和好的项目经理的之间没有本质的冲突.这两个职位都是面向细节和面向结果的.但是一个人不可能同时做好这两个工作. 为了理解这种不兼容性,必须认识程序员和项目经理工作任务的类型. 开发软件需要进入一种沉浸状态,为了更加有效率,程序员必须完全进入代码世界,来专注于操作算式和变量,预见

程序员可以转产品经理吗

程序员可以转产品经理吗 产品经理跟程序员是不一样的,产品经理只需要懂一点,不需要多厉害,应届生都是可以当产品经理的.而程序员强调编程技能,专业技术,语言功底,懂不懂操作系统这些:产品经理强调沟通协调能力. 程序员可以转产品经理吗?很多已经工作了一段时间的人都有这个疑问,在这里分析一下程序员转产品经理的可行性.首先讲一下这两个职位的定义,程序员就是平时所说的软件工程师,程序员是软件工程师的口语版,是属于研发岗位:产品经理属于技术管理部门,总的来说算是偏向于技术的管理岗位,像hr也是管理岗位,只是跟

程序员如何和产品经理优雅的干架

早前,平安产险科技一名外包程序员和一名外包产品经理干架的视频几乎在互联网圈都传遍了,因为产品提了一个需求:要求用户App的主题颜色能根据手机壳自动调整. 首先说这个需求对于应用开发工程师来说,确实是有点奇葩,当然并非不能实现.这块涉及图形图像处理,用机器学习和人工智能来提取图像颜色,这是基本图像识别过程,对于采集图像,可以提示对着镜子自拍一张,上传图片,通过大量的训练数据,来识别手机体颜色.当然并不能保证百分百成功,因为图像可能模糊或者,不明显等其他原因,就算不断用CNN(卷积神经网络)卷积运算

趣文:你对程序员适不适合做老公的看法是?

内容来自网络整理. 首先我们看原文:  原文来自csdn论坛某贴: 找了个程序员做老公,所以认识了很多程序员.以前就没对程序员有过不好的看法,现在则更不会.发现csdn上老有悲观的论调,说程序员找不到老婆.今天我就以一个程序员妻子的身份,来写写找程序员做老公的好处.希望能给各位mm有借鉴,找程序gg做男朋友.  一.找程序员不用担心外遇. 程序员是对着电脑工作,周围同事大部分是男生.他的生活中基本接触不到mm,所以不会有办公室恋情的发生,也就不会有外遇问题发生.而且面对的诱惑少,不 像销售啊等职

【产品】程序员如何和产品经理沟通02——互联网产品从想法到实现

简介  作为一只从技术转向产品的程序猿,和大家分享一下产品相关的一些要素.一方面给各位程序猿参考一下,所谓知己知彼,方便以后和产品汪们优雅地撕逼:另一方面,如果有想从技术转产品的程序猿也可以作为参考. 一个产品从拍脑瓜子想出ideal到最终产品发布上线需要经过哪些过程呢?作为一个程序猿可能不是很清楚. 看了以下的一个简单框架就大概能略知一二,另外以下每个小点都可以是一个深耕的研究方向,不管是产品.销售.设计.开发.运维,要做好.做精一个产品实在不易呀. 一个互联网产品的诞生过程: 1.产品的定义

趣图:程序员发型的逻辑代数

趣图:如何辨别程序员设计师的水平 趣图:“面向对象”程序员眼中的世界 原文地址:https://www.cnblogs.com/javafirst0/p/10772341.html

程序员到项目经理:从内而外的提升

转自:http://www.cnblogs.com/watsonyin/archive/2012/09/10/2679528.html 目录 从程序员到项目经理(一):为什么要当项目经理 从程序员到项目经理(二):升职之辨 从程序员到项目经理(三):认识项目经理 从程序员到项目经理(四):外行可以领导内行吗 从程序员到项目经理(五):程序员加油站,不是人人都懂的学习要点 从程序员到项目经理(六):程序员加油站 — 懂电脑更要懂人脑 从程序员到项目经理(七):程序员加油站 — 完美主义也是一种错