几个有趣的问题

1、考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策略?这种策略是什么?
答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,只要后行者能放,先行者一定也有地方放。先行者必胜。

2、一块矩形的巧克力,初始时由N x M个小块组成。每一次你只能把一块巧克力掰成两个小矩形。最少需要几次才能把它们掰成N x M块1×1的小巧克力?
答案:N x M – 1次显然足够了。这个数目也是必需的,因为每掰一次后当前巧克力的块数只能增加一,把巧克力分成N x M块当然需要至少掰N x M – 1次。

3、地球上有多少个点,使得从该点出发向南走一英里,向东走一英里,再向北走一英里之后恰好回到了起点?
答案:“北极点”是一个传统的答案,其实这个问题还有其它的答案。事实上,满足要求的点有无穷多个。所有距离南极点1 + 1/(2π)英里的地方都是满足要求的,向南走一英里后到达距离南极点1/(2π)的地方,向东走一英里后正好绕行纬度圈一周,再向北走原路返回到起点。事实上,这仍然不是满足要求的全部点。距离南极点1 + 1/(2kπ)的地方都是可以的,其中k可以是任意一个正整数。

4、A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B?
答案:A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。

5、两个机器人,初始时位于数轴上的不同位置。给这两个机器人输入一段相同的程序,使得这两个机器人保证可以相遇。程序只能包含“左移n个单位”、“右移n个单位”,条件判断语句If,循环语句while,以及两个返回Boolean值的函数“在自己的起点处”和“在对方的起点处”。你不能使用其它的变量和计数器。
答案:两个机器人同时开始以单位速度右移,直到一个机器人走到另外一个机器人的起点处。然后,该机器人以双倍速度追赶对方。程序如下:
while(!at_other_robots_start) {
move_right 1
}
while(true) {
move_right 2
}

6:某种药方要求非常严格,你每天需要同时服用A、B两种药片各一颗,不能多也不能少。这种药非常贵,你不希望有任何一点的浪费。一天,你打开装药片A的药瓶,倒出一粒药片放在手心;然后打开另一个药瓶,但不小心倒出了两粒药片。现在,你手心上有一颗药片A,两颗药片B,并且你无法区别哪个是A,哪个是B。你如何才能严格遵循药方服用药片,并且不能有任何的浪费?
答案:把手上的三片药各自切成两半,分成两堆摆放(每片的两半进入不同的堆)。再取出一粒药片A,也把它切成两半,然后在每一堆里加上半片的A。现在,每一堆药片恰好包含两个半片的A和两个半片的B。一天服用其中一堆即可。

7:你在一个飞船上,飞船上的计算机有n个处理器。突然,飞船受到外星激光武器的攻击,一些处理器被损坏了。你知道有超过一半的处理器仍然是好的。你可以向一个处理器询问另一个处理器是好的还是坏的。一个好的处理器总是说真话,一个坏的处理器总是说假话。用n-2次询问找出一个好的处理器。
答案:给处理器从1到n标号。用符号a->b表示向标号为a的处理器询问处理器b是不是好的。首先问1->2,如果1说不是,就把他们俩都去掉(去掉了一个好的和一个坏的,则剩下的处理器中好的仍然过半),然后从3->4开始继续发问。如果1说2是好的,就继续问2->3,3->4,……直到某一次j说j+1是坏的,把j和j+1去掉,然后问j-1 -> j+2;或者从j+2 -> j+3开始发问,如果前面已经没有j-1了(之前已经被去掉过了)。注意到你始终维护着这样一个“链”,前面的每一个处理器都说后面那个是好的。这条链里的所有处理器要么都是好的,要么都是坏的。当这条链越来越长,剩下的处理器越来越少时,总有一个时候这条链超过了剩下的处理器的一半,此时可以肯定这条链里的所有处理器都是好的。或者,越来越多的处理器都被去掉了,链的长度依旧为0,而最后只剩下一个或两个处理器没被问过,那他们一定就是好的了。另外注意到,第一个处理器的好坏从来没被问过,仔细想想你会发现最后一个处理器的好坏也不可能被问到(一旦链长超过剩余处理器的一半,或者最后没被去掉的就只剩这一个了时,你就不问了),因此询问次数不会超过n-2。

8:有25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名?
答案:每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了(第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号:
A组:1,2,3,4,5
B组:1,2,3,4,5
C组:1,2,3,4,5
D组:1,2,3,4,5
E组:1,2,3,4,5
从现在所得到的信息,我们可以知道哪些马已经被排除在3名以外。只要已经能确定有3匹或3匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到,只有上表中粗体蓝色的那5匹马才有可能为2、3名的。即:A组的2、3名;B组的1、2名,C组的第1名。取这5匹马进行第7场比赛,第7场比赛的前两名就是25匹马中的2、3名。故一共最少要赛7场。
这道题有一些变体,比如64匹马找前4名。方法是一样的,在得出第1名以后寻找后3名的候选竞争者就可以了。

9:有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
答案:第一步:把140克盐分成两等份,每份70克。
第二步:把天平一边放上2+7克砝码,另一边放盐,这样就得到9克和61克分开的盐。
第三步:将9克盐和2克砝码放在天平一边,另一边放盐,这样就得到11克和50克。于是50和90就分开了。


10:“你面前有两扇门,其中一扇门内藏着宝藏,但如果你不小心闯入另一扇门,只能痛苦地慢慢死掉……”。在这两扇门后面,有两个人,这两个人都知道哪扇门后有宝藏,哪扇门擅闯者死,而这两个人呢,一个人只说真话,一个人只说假话。规则是,你只能问这两个人每人一个问题。那么,你问什么问题?问哪个人?根据他们的回答,你又该怎么做?
答案:随便问其中一个人:“如果我问另一个人,他会跟我说哪扇门后是宝藏?如果你问的恰好是讲真话的那个人,那他指给你的答案就是那扇通向死亡的门,因为他会诚实地告诉你那个说谎的人会怎么说。如果你问的是那个只说谎话的,你得到的也是错误的答案,因为另一个人是讲真话的,说谎话的人会告诉你与讲真话的人相反的答案。所以你只要随便问一个人上述问题,然后选择与他们说的相反的门就行了。

11:十个人将被关在一间漆黑的屋子里前后排成一队,外星人将给每个人戴一顶帽子,帽子为紫色或者绿色,然后外星人会将灯打开,这十个人每个人都无法看见自己头上的帽子是什么颜色,但可以看见排在前面的每个人头上帽子的颜色。帽子的颜色是随机的,可能全是紫的,也可能全是绿的,或者是任意的组合。外星人会从后往前问每一个人:“你头上的帽子是什么颜色?”如果这个人答对了,这个人就安然无事,否则,这个人将被爆头。每个人的答案屋子里所有人都可以听到。
你可以设计一个方案,使这十个人提前制定一个计划,这个计划必须拯救尽可能多的人。
答案:第十个人计算排在前面的所有人的绿帽子是奇数还是偶数并向前面的人发出一个信号,这样排在前面人就可以再通过排在更前面的所有人的绿帽子的奇偶数是否变化来判断自己帽子的颜色,因为如果绿帽子奇偶发生变化,那自己就是那个导致变化的“绿帽子”,如果没变化,自己就是“紫帽子”。
因为所有的人除了回答外星人的问题不能说话,所以第十个人的“信号”只能包含在自己的答案里,比如如果排在前面的九个人有奇数顶绿帽子,这个人类就告诉外星人自己的帽子是“绿色”,如果是偶数,就猜自己的帽子是“紫色”。这样等于给他前面的人一个暗号,排在他前面的这个人,可以通过计算自己前面的所有人的绿帽子的奇偶变化来判断自己的帽子是绿还是紫。
排在最后的那个人为了大众利益没有选择,根据前面的人的帽子情况告诉外星人自己是“绿帽子”还是“紫帽子”,他的答案有1/2的几率正确,但他前面的人一定都能答对。


12:两个人玩游戏掷硬币,硬币正反面出现的概率都是二分之一。轮流投掷,谁先出现正面谁获胜。问先投掷的人获胜的概率。说出尽可能多的解法。

答案:<法一>直接计算。先投掷人获胜的概率是1/2+1/8+1/32+...。就是一个公比为1/4的等比级数,运用公式可知答案。

<法二>假设先手获胜的概率为p,可以分类为第一次投掷就获胜和非第一次。第一次投掷获胜的概率显然是1/2,非第一次是p * 1/4。可得方程:1/2 + p/4 = p.可解出p

<法三>仍然设先手获胜概率为p,考虑后手获胜概率。后手投掷k次获胜概率为先手投掷k次获胜概率再乘以1/2。所以可得p+1/2*p = 1.解得p=2/3.


13:世界上每十万人中就有一人是艾滋病患者。艾滋病的检测目前已经很准确但并非万无一失。它的检测准确率是99%假设你刚去做完艾滋病检验得到的了检测报告结果是阳性!你会绝望或昏倒吗?或者说你会担心到什么程度?

答案:你大可不必那么担心因为你几乎可以确定没有得艾滋病。什么?检测是阳性还几乎可以确定没有艾滋病?!是的为了说明这一点假设有100万人和你做了同样的检验。在这100万人中得病的会有10个没有得病的有999990个。当这些人接受检验时9~10个人患有艾滋病的人会呈现阳性反应另外999990个没有得病的人则会有1%出现错误的阳性反应换算成人数大概是1万人。也就是说大约10000个阳性诊断中实际只有10个左右是真正患者。因此绝大多数所呈阳性的反应都是误诊。当你得到阳性的检测结果时真正得艾滋病的机会大概只有千分之一。(当然如果你在检测之前做了很可能感染艾滋病的事那就另当别论了)

14:有一对夫妇先后生了两个孩子其中一个孩子是女孩问另一个孩子是男孩的概率是多大?

答案:2/3.两个孩子的性别有以下四种可能:(男男)(男女)(女男)(女女)其中一个是女孩就排除了(男男)还剩三种情况。其中另一个是男孩的占了两种2/3. 
如果题干变成第一个孩子是女孩,那么答案就是1/2了。

15:利用2克和7克砝码以及天平,如何三次将140克的盐 分成50、90克两份?
第一种方法:
第一次:先称 7+2克盐 (相当于有三个法码2,7,9)
第二次:称2+7+9=18克盐 (相当于有2,7,9,18四个法码)
第三次:称7+18=x+2,得出x是23,23+9+18=50克盐.
剩下就是90克了.
第二种方法:
1.先把140克盐分为两份,每份70克
2.在把70克分为两份,每份35克
3.然后把两个砝码放在天平两边,把35克面粉分成两份也放在两边(15+7=20+2)
现在有四堆面粉70,35,15,20,分别组合得到
70+20=90
35+15=50


16:10个瓶子一个有毒,毒性发作时间很长,问如何一次实验用最少的小白鼠测出哪瓶有毒 
解法:其实思路还是二分。总结来说,4个瓶子需要2只,8个瓶子需要3只,16个需要4只,所以10个也是需要4只。 
拿8个瓶子的来说吧: 
第一只:1234 
第二只:1256 
第三只:1357 
经过简单验证可知:如果把三只白鼠的死活看成3位二进制,那么每只白鼠对应一位数字。所以通过白鼠的死活可知哪瓶有毒。 


17:经典海盗分金币:5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。每个人首先保证自己活着,然后希望自己分得的金币最多,如果扔人和不扔人自己得到的金币相同,倾向于扔人。 

答案:从后向前推,如果只剩4号和5号的话,5号一定投反对票以独吞全部金币。所以,4号惟有支持3号才能保命。 
3号知道这一点,就会提出“100,0,0”的分配方案,因为他知道4号一无所获但还是会投赞成票,再加上自己一票,他的方案即可通过。 
不过,2号推知3号的方案,就会提出“98,0,1,1”的方案。由于该方案对于4号和5号来说比在3号分配时更为有利,他们将支持他而不希望他出局而由3号来分配。 
同样,2号的方案也会被1号所洞悉,1号将提出(97,0,1,2,0)或(97,0,1,0,2)的方案。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的票,1号的方案可获通过中。所以答案是:1号强盗分给3号1枚金币,分给4号或5号强盗2枚,自己独得97枚。 
如果条件改变为达到半数同意就通过,类似的分析可知最优方案是(98,0,1,0,1)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值