球的重量
有8个球,其中1个比另外的要略重。使用天平在不用砝码的前提下,你最少要称几次,才能找出这个球?
答案:最少称两次:
想法一:把所有的球分成三组,每组两个;首先,将其中的两组进行称重,如果其中一组比较重,那将改组的两个球再次称重,重的球就是你要找的;若两组一样重,那么没参与称重的那组两个球进行称重,重的球就是你要找的。
想法二:把所有球分成两组,每组三个;进行称重,将重的那组任选两个球进行称重,若等重,那剩下的那个就是你要找的,若不等重,重的那个就是你要找的。
罐子和水
你有不限量的水,还有两个罐子,容量分别是5升和3升。请精确的称量出4升水。
答案
方法一:先把5升的罐子装满,然后用罐子里的水来倒满3升的罐子,此时5升罐子中还剩5-3=2升水;倒掉3升罐子里的水,然后把5升罐子里剩下的2升水倒入3升罐子,再次把5升罐子装满水,并用它往3升罐子倒水,由于把3升罐子装满还需要1升水,因此5升罐子里的水量最终变成了5-1=4升水。
方法二:把3升的罐子装满水,倒入5升的罐子,再将3升的罐子装满倒入5升的罐子,此时3升的罐子里还会剩下1升的水,现在将5升的罐子里的水倒掉,将3升的罐子中的1升水倒入5升的罐子,现在再将3升的罐子装满水,最后将这3升水倒入5升的罐子,此时5升的罐子里就是4升水。
熊的颜色
你建造了一座房子,每面都朝南。突然,你发现一只熊。它是什么颜色?
答案:白色。因为只有在北极,才可能所有的墙都朝南。
药丸难题
医生给了病人两种药丸,每种两颗,两种药丸的成分不同,但外观一样,医生要求早上和晚上,每种药各吃一颗。现在药丸被混在了一起,难以分辨。如果病人没按照规定吃药或者不吃药,就会死亡。请问他要怎么做才能活下来?
答案:虽然再去找医生,要求他重新开药,也不能说是错误答案。但聪明的答案是:把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半。
工资问题
你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你怎样给你的工人付费?
答案:分成比例1:2:4的三段,因为两次弄断就是三段,第一天你给1,第二天你给2,找回你1,你自己就有1和4,第三天再给1,自己剩下4,第四天给4,然后叫他把1.2找给你,第五天给1,第六天给2叫他1找给你,第七天把最后1给他。
灯泡问题
房间里有三盏灯,屋外有三个开关,分别控制这三盏等,只有进入房间,才能看到那一个电灯时亮的。请问如何只进入房间一次,就能指明拿一个开关控制哪一个灯?
答案:假如三个开关分别是A、B、C,三盏灯分别是a、b、c,先将A开关打开,过一段时间后,将A开关关掉,将B开关打开,此时进屋,亮的就是b灯,摸一下不亮的灯,灯泡热的那个是a灯,不热的那个是c灯。
扑克牌问题
给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的,要求这个瞎子把牌分成两堆,使得每堆牌里正面照上的牌的张数一样多,瞎子该怎么做?
答案:把扑克牌分成两堆,一堆10张,一堆42张,然后把小的那一堆里的所有牌全部翻过来。
硬币问题
如何用一枚硬币等概率地产生一个1到3之间的随机整数?如果这枚硬币是不公正的呢?
答案:
如果是公正的硬币,则投掷两次,“正反”为1,“反正”为2,“正正”为3,“反反”重来。
如果是不公正的硬币,注意到出现“正反”和“反正”的概率一样,因此令“正反反正”、“反正正反”、“正反正反”分别为1、2、3,其余情况重来。另一种更妙的办法是,投掷三次硬币,“正反反”为1,“反正反”为2,“反反正”为3,其余情况重来。
最大值问题
30枚面值不全相同的硬币摆成一排,甲、乙两个人轮流选择这排硬币的其中一端,并取走最外边的那枚硬币。如果你先取硬币,能保证得到的钱不会比对手少吗?
答案:先取者可以让自己总是取奇数位置上的硬币或者总是取偶数位置上的硬币。数一数是奇数位置上的面值总和多还是偶数位置上的面值总和多,然后总是取这些位置上的硬币就可以了。
感染问题
考虑一个n*n的棋盘,把有公共边的两个格子叫做相邻的格子。初始时,有些格子里有病毒。每一秒钟后,只要一个格子至少有两个相邻格子染上了病毒,那么他自己也会被感染。为了让所有的格子都被感染,初始时最少需要有几个带病毒的格子?给出一种方案并证明最优性。
答案:至少要n个,比如一条对角线上的n个格子。n个格子也是必需的。当一个新的格子被感染后,全体被感染的格子所组成的图形的周长将减少0个、 2个或4个单位(具体减少了多少要看它周围被感染的格子有多少个)。又因为当所有格子都被感染后,图形的周长为4n,因此初始时至少要有n个被感染的格 子。
染色问题
在一个m*n的棋盘上,有k个格子里放有棋子。是否总能对所有棋子进行红蓝二染色,使得每行每列的红色棋子和蓝色棋子最多差一个?
答案:可以。建一个二分图G(X,Y),其中X有m个顶点代表了棋盘的m个行,Y有n个顶点代表了棋盘的n个列。第i行第j列有棋子就在X(i) 和Y(j)之间连一条边。先找出图G里的所有环(由于是二分图,环的长度一定是偶数),把环里的边红蓝交替染色。剩下的没染色的图一定是一些树。对每棵树 递归地进行操作:去掉一个叶子节点和对应边,把剩下的树进行合法的红蓝二染色,再把刚才去掉的顶点和边加回去,给这个边适当的颜色以满足要求。
取反问题
任意给一个8*8的01矩阵,你每次只能选一个3*3或者4*4的子矩阵并把里面的元素全部取反。是否总有办法把矩阵里的所有数全部变为1?
答案:不能。大矩阵中有36个3*3的小矩阵和25个4*4的小矩阵,因此总共有61种可能的操作。显然,给定一个操作序列,这些操作的先后顺序 是无关紧要的;另外,在一个操作序列中使用两种或两种以上相同的操作也是无用的。因此,实质不同的操作序列只有2^61种。但8*8的01矩阵一共有 2^64种,因此不是每种情况都有办法达到目的。
抓狐狸
五个洞排成一排,其中一个洞里藏有一只狐狸。每个夜晚,狐狸都会跳到一个相邻的洞里;每个白天,你都只允许检查其中一个洞。怎样才能保证狐狸最终会被抓住?
答案:按照2, 3, 4, 2, 3, 4的顺序检查狐狸洞可以保证抓住狐狸。为了说明这个方案是可行的,用集合F表示狐狸可能出现的位置,初始时F = {1, 2, 3, 4, 5}。如果它不在2号洞,则第二天狐狸已经跑到了F = {2, 3, 4, 5}。如果此时它不在3号洞,则第三天狐狸一定跑到了F = {1, 3, 4, 5}。如果此时它不在4号洞,则再过一晚后F = {2, 4}。如果此时它不在2号洞,则再过一天F = {3, 5}。如果此时它不在3号洞,再过一天它就一定跑到4号洞了。方案不是唯一的。
立方体分割
把一个3*3*3的立方体切成27个单位立方体,若每一刀切完后都允许重新摆放各个小块的位置,最少可以用几刀?答案仍然是6刀,因为 正中间那个单位立方体的6个面都是后来才切出来的,因此怎么也需要6刀。考虑这个问题:若把一个n*n*n的立方体切成一个个单位立方体,最少需要几刀?
答案:事实上,从一个更强的命题出发反而能使问题变得更简单。对于一个a*b*c的长方体,我们需要f(a)+f(b)+f(c)刀,其中 f(x)=?log(x)/log(2)?。只需要注意到,在整个过程中的任何一步,切完当前最大的块所需要的刀数也就等于整个过程还需要的刀数,因为其 它小块需要的刀数都不会超过最大块所需刀数,它们都可以与最大块一道并行处理。这表明,我们的最优决策即是让当前的最大块尽可能的小,也就是说要把当前的 最大块尽可能相等地切成两半。利用数学归纳法,我们可以很快得到本段开头的结论。