背景:面试算法岗位时候,经常出现各种智力相关的题,这种题不仅锻炼思维能力,而且比较体现一个人的智力水平。因此可以养成思考习惯,时常思考及更新。

因为没有标准答案,需要思考,所以欢迎批评与探讨。

目录

一、数和数积

1.1 问题

1.2 分析

A,B不知

A知道(B不知)时知道了

B知道(A一开始不知且现在知道了)时知道了

如果为(2,2)

如果为(2,4)

如果为(18,20)

1.3 答案

二、海盗分金

2.1 问题

2.2 推理


一、数和数积

1.1 问题

1到20两个数,和告诉A,积告诉B,

A说不知道多少,B也说不知道;

这时A说我知道了,B接着说我也知道了。

问这两个数是多少?

1.2 分析

我们先列出所有结果,然后根据对应的条件排除。

(闲扯一下,不禁想到了《三体》里面的猜疑链,但是不相关并且这道题比那个难)

A,B不知

根据A,B不知道是多少这个条件进行排除。

因为A不知道,所以肯定不会是(1,1),(2,1),(1,2)

B不知道,肯定不会是最大公约数相关以及公约数乘积,所以排除下面这些

算法面试智力题集锦与详解——持续更新

A知道(B不知)时知道了

说起来有些绕,但是其中逻辑就是:A根据B不知道这个信息,从而确定了两个数。

隐含之意就是,A根据自己知道的一些信息,不能排除一些可能性,但是根据B不知道这个事实,排除了一些可能性,因此知道了。所以,结果不是绿色的叉,但是与绿色的叉有相同的和,并且只有一种可能性。条件如下,说起来有些绕:

  • A知道的和结果与绿色的叉的和一样
  • 和一样的时候只有n种可能性
  • 这两种可能性分别为A知道的结果一种,另外n种为绿色的叉

这种情况可以排除巨量的可能性只剩下棕色圆圈的三种可能性(2,2),(2,4),(18,20)

算法面试智力题集锦与详解——持续更新

B知道(A一开始不知且现在知道了)时知道了

B也知道情况为(2,2),(2,4),(18,20)之中的一种,然后根据条件排除了一些条件。

如果为(2,2)

A知道和为4,不确定为(1,3)还是(2,2)

A看B不知道,排除了积为3,所以知道自己是(2,2)

B看到的积为4,不确定是(1,4)和为5,还是(2,2)和为4

因为B看到A认为B不知道而知道,所以排除A看到和为5情况,和为4;

这种假设成立

如果为(2,4)

A知道和为6,不确定是(1,5)或者(2,4)或者(3,3)

看到B不知道,所以排除了(1,5),(3,3)的情况,确定是(2,4)

B看到积为8,不确定是(2,4)A看到是6,还是(1,8)A看到是9

因为B看到A认为不知道而知道,所以排除A看到和为9的情况,和为6

假设成立

如果为(18,20)

A看到和为38,不确定是(18,20)还是(19,19)

看到B不知道,排除(19,19)的可能性,确定为(18,20)

B看到积为360,可以确定(18,20)排除

(看到之前少排除了一些情况,不过排除法只要达到排除条件即可,未必非要全部排除)

1.3 答案

(2,2)和(2,4)

二、海盗分金

2.1 问题

是说5个海盗抢得100枚金币,假定“每个海盗都是绝顶聪明且很理智”,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。
(闲扯一下,这道题我很早之前就看到,算是博弈论里面的题,等于已知条件下博弈的纳什均衡是什么,不过程序员们包括我,很少知道博弈论的存在,不知道博弈论的话就纯粹是体现推理能力。)

2.2 推理

从后向前推,如果1至3号强盗都喂了鲨鱼,只剩4号和5号的话,5号一定投反对票让4号喂鲨鱼,以独吞全部金币。所以,4号惟有支持3号才能保命。

3号知道这一点,就会提出“100,0,0”的分配方案,对4号、5号一毛不拔而将全部金币归为已有,因为他知道4号一无所获但还是会投赞成票,再加上自己一票,他的方案即可通过。

不过,2号推知3号的方案,就会提出“98,0,1,1”的方案,即放弃3号,而给予4号和5号各一枚金币。由于该方案对于4号和5号来说比在3号分配时更为有利,他们将支持他而不希望他出局而由3号来分配。这样,2号将拿走98枚金币。

同样,2号的方案也会被1号所洞悉,1号并将提出(97,0,1,2,0)或(97,0,1,0,2)的方案,即放弃2号,而给3号一枚金币,同时给4号(或5号)2枚金币。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的票,1号的方案可获通过,97枚金币可轻松落入囊中。这无疑是1号能够获取最大收益的方案了!答案是:1号强盗分给3号1枚金币,分给4号或5号强盗2枚,自己独得97枚。分配方案可写成(97,0,1,2,0)或(97,0,1,0,2)。

相关文章: