当前位置:首页 » 操作系统 » 强盗时算法

强盗时算法

发布时间: 2025-04-29 18:12:49

① 10个智力题

1、一个人在林中散步时,无意中听到了几个强盗在商量如何分赃。强盗们说,如果每人分6匹布,则剩余5匹;如果每人分7匹布,则少8匹。请问:共有几个强盗,几匹布。

解析:这类问题就是我国数学史上有名的盈亏问题。它有一个固定的公式:(盈+亏)/分差=人数(单位数)。所以,这道题的算法就是:

强盗人数=(8+5)/(7—6)=13

布匹数=13×6+5=83

2、有四数,取其每三个而相加,则其和分别为22、24、27 和20。求这四个数各是多少。

解析:如果设其中某个数为X,则其他三个数很难用X的式子表示出来。设四个数之和为X,则这四个数分别为X-22、X-24、X-27和X-20。

列方程:(X-22)+(X-24)+(X-27)+(X-20)=X

解得: X=31

31-22=9,31-24=7,31-27=4,31-20=11

即这四个数分别为9、7、4、11。

3、小王用600元买了一匹马,700元卖出,又用800元买回此马,900元卖出。小王一共赚了多少钱?还是亏了多少钱?

解析:整体收入是,第一次卖700元,第二次卖900元,整体收入即700+900=1600元。整体支出是,第一次买马花600元,第二次买马花800元,整体支出是600+800=1400元。小王的这次纯收入是:1600-1400=200元,也就是说,小王这次买卖共赚了200元钱。

4、一人花8元买一只鸡,又以9元卖出,又花10元买回,再次以11元卖出,这个人是亏了还是赚了?

解析:把买进看作负,卖出看作正,可以用以下的方式来记录:

花8元买只鸡:记作-8;

以9元卖出去:记作+9;

再花10元买回来:记作-10;

再以11元在卖出去:记作+11;

把以上的数相加能得出答案为2元。

5、甲、乙、丙,一位是山东人,一位是河南人,一位是湖北人,现在只知道:丙比湖北人年龄大,甲和河南人不同岁,河南人比乙年龄小,由此可以推知():

A:甲不是湖北人 B:河南人比甲年龄大 C:湖北人年龄最小 D:河南人比山东人年龄小

解析:甲跟河南人不同岁,证明甲不是河南人。河南人比乙小,证明乙不是河南人。所以丙是河南人。丙比湖北人大,丙是河南人,而乙比河南人大,所以乙不是湖北人,甲是湖北人,而且最小。所以答案是C。

② 5个强盗分500块金子

我看到过一个相同的问题:
有5个海盗分100金币,写了5张纸条,分别写了1~5五个数,然后抓阄,抓到1就先提出分钱方案,如果有超过一半的人不同意,那么他就会被杀掉,然后抓到2的人提出...请问最后分的结果和他们的方案?
而这个问题应该跟你的这个问题答案一样,答案如下:
很古老的数学问题啊,其实也算一个逻辑问题,如果你 搜索下“强盗分金”就可以找到很多网页,现将一份答案提供如下 (其实 是扩展命题的推理,有兴趣自己试试?):
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名海盗的分配难题。

Omohundro的贡献是他把这一问题扩大到有500名海盗的情形,即500名海盗瓜分100块金子。显然,类似的规律依然成立——至少是在一定范围内成立。事实上,前面所述的规律直到第200号海盗都成立。200号海盗的方案将是:从1到199号的所有奇数号的海盗都将一无所获,而从2到198号的所有偶数号海盗将各得1块金子,剩下的1块金子归200号海盗自己所有。
乍看起来,这一论证方法到200号之后将不再适用了,因为201号拿不出更多的金子来收买其他海盗。但是即使分不到金子,201号至少还希望自己不会被扔进海里,因此他可以这样分配:给1到199号的所有奇数号海盗每人1块金子,自己一块也不要。
202号海盗同样别无选择,只能一块金子都不要了——他必须把这100块金子全部用来收买100名海盗,而且这100名海盗还必须是那些按照201号方案将一无所获的人。由于这样的海盗有101名,因此202号的方案将不再是唯一的——贿赂方案有101种。
203号海盗必须获得102张赞成票,但他显然没有足够的金子去收买101名同伙。因此,无论提出什么样的分配方案,他都注定会被扔到海里去喂鱼。不过,尽管203号命中注定死路一条,但并不是说他在游戏进程中不起任何作用。相反,204号现在知道,203号为了能保住性命,就必须避免由他自己来提出分配方案这么一种局面,所以无论204号海盗提出什么样的方案,203号都一定会投赞成票。这样204号海盗总算侥幸拣到一条命:他可以得到他自己的1票、203号的1票、以及另外100名收买的海盗的赞成票,刚好达到保命所需的50%。获得金子的海盗,必属于根据202号方案肯定将一无所获的那101名海盗之列。
205号海盗的命运又如何呢?他可没有这样走运了。他不能指望203号和204号支持他的方案,因为如果他们投票反对205号方案,就可以幸灾乐祸地看到205号被扔到海里去喂鱼,而他们自己的性命却仍然能够保全。这样,无论205号海盗提出什么方案都必死无疑。206号海盗也是如此——他肯定可以得到205号的支持,但这不足以救他一命。类似地,207号海盗需要104张赞成票——除了他收买的100张赞成票以及他自己的1张赞成票之外,他还需3张赞成票才能免于一死。他可以获得205号和206号的支持,但还差一张票却是无论如何也弄不到了,因此207号海盗的命运也是下海喂鱼。
208号又时来运转了。他需要104张赞成票,而205、206、207号都会支持他,加上他自己一票及收买的100票,他得以过关保命。获得他贿赂的必属于那些根据204号方案肯定将一无所获的人(候选人包括2到200号中所有偶数号的海盗、以及201、203、204号)。
现在可以看出一条新的、此后将一直有效的规律:那些方案能过关的海盗(他们的分配方案全都是把金子用来收买100名同伙而自己一点都得不到)相隔的距离越来越远,而在他们之间的海盗则无论提什么样的方案都会被扔进海里——因此为了保命,他们必会投票支持比他们厉害的海盗提出的任何分配方案。得以避免葬身鱼腹的海盗包括201、202、204、208、216、232、264、328、456号,即其号码等于200加2的某一方幂的海盗。
现在我们来看看哪些海盗是获得贿赂的幸运儿。分配贿赂的方法是不唯一的,其中一种方法是让201号海盗把贿赂分给1到199号的所有奇数编号的海盗,让202号分给2到200号的所有偶数编号的海盗,然后是让204号贿赂奇数编号的海盗,208号贿赂偶数编号的海盗,如此类推,也就是轮流贿赂奇数编号和偶数编号的海盗。

结论是:当500名海盗运用最优策略来瓜分金子时,头44名海盗必死无疑,而456号海盗则给从1到199号中所有奇数编号的海盗每人分1块金子,问题就解决了。由于这些海盗所实行的那种民主制度,他们的事情就搞成了最厉害的一批海盗多半都是下海喂鱼,不过有时他们也会觉得自己很幸运——虽然分不到抢来的金子,但总可以免于一死。只有最怯懦的200名海盗有可能分得一份赃物,而他们之中又只有一半的人能真正得到一块金子,的确是怯懦者继承财富。

出处:<强盗分金算法及分析 >

③ 三个强盗三个商人过河 简单的入门级别算法

3个商人和3个强盗要过一条河,如果在河的任意一边商人数目比强盗少,商人就会被抢劫,如何过河?

河边有一只小船,小船上原本无人,小船最多能坐2人,他们都不会去游泳,要保证商人不会被抢劫。

先简化一下商人和强盗:

商人为0 强盗为X 河为-

初始情况:商人和强盗都在河的一边,即000xxx-

操作步骤:

1商人1强盗过去 一商人回000xx-x

2强盗过去 1强盗回 000x-xx

2商人过去 1商人1强盗回 00xx-x0

2商人过去 1强盗回 xxx-000

2强盗过去 1强盗回 xx-000x

2强盗过去 完毕 -xxx000

热点内容
forifpython 发布:2025-04-29 23:18:24 浏览:523
删除python模块 发布:2025-04-29 23:14:27 浏览:747
锁定sim卡需要输入pin密码是多少 发布:2025-04-29 22:55:12 浏览:482
8p相当安卓什么手机 发布:2025-04-29 22:55:10 浏览:636
甘肃电信宽带密码是多少 发布:2025-04-29 22:55:09 浏览:267
对偶加密 发布:2025-04-29 22:32:36 浏览:955
上传下载服务器 发布:2025-04-29 22:24:56 浏览:406
java继承编程题 发布:2025-04-29 22:13:35 浏览:395
计算机二级真题c语言 发布:2025-04-29 21:57:17 浏览:249
hibernate建数据库 发布:2025-04-29 21:48:22 浏览:133