第1题
Alice和她的同学Bob通过网上聊天商量明天早晨谁去教室打扫卫生的事,Bob说:“我在桌上放了一枚硬币,你猜一下,是正面朝上还是反面朝上?如果猜对了,我去扫地。如果猜错了,嘿嘿…。”
Alice显然不会同意,担心自己不论猜正面还是反面,Bob都说她错了。
分析:
看到这题,我的第一反应是葛优的“分歧终端机”。(╯▽╰)
最关键是要找到一种方法使得Alice给出她的猜测后Bob不能抵赖。一种参考答案如下:
1. Bob与Alice商量选取一个哈希函数hash(),hash()的值域应该尽可能大。
2. Bob选择一个大随机数x,计算hash(x);通过网络告诉Alice hash(x)的值
3. Alice告诉Bob对x的奇偶性猜测(偶数表示“正面”;奇数代表“背面”)
4. Bob告诉Alice x的值
5. Alice验证hash(x)
但是这样也不是100%能够防止Bob作弊的。Bob如果想抵赖,那么他应该事先找出两个大整数,一奇一偶,而且哈希函数值相同。(抵赖的难度就取决于hash函数的选择了)
第2题
Alice与Bob相爱了,他们想通过书信来商量私奔的事。暗恋Alice的邮递员Chuck经常利用职权之便偷看他们之间的通信。Alice与Bob各有一把锁和只能打开自己那把锁的钥匙。另外Bob还有一个能够上锁的铁盒子。问如何防止Chunk偷看他们之间的通信?
分析:
Bob将情书放进铁盒,用自己的锁给盒子上锁。Alice收到后给盒子加上自己的锁,然后将盒子寄回给Bob。Bob收到后将自己的锁取下,再将盒子寄给Alice。Alice收到盒子后取下自己的锁就可以看信了。
第3题
某人第一天由 A地去B地,第二天由 B地沿原路返回 A 地。问:在什么条件下,可以保证途中至少存在一地,此人在两天中的同一时间到达该地。
分析:
假如我们换一种想法,把第二天的返回改变成另一人在同一天由B去A,问题就化为在什么条件下,两人至少在途中相遇一次,这样结论就很容易得出了:只要其中一个人在另外一个人到达之前出发,则两人必会在途中相遇。
第4题
一条长度为L的竹竿上分布着N个蚂蚁,已知所有蚂蚁的行进速度都是v,两只蚂蚁碰头后会掉头走,给定初始时刻蚂蚁的行进方向。问如何计算所有蚂蚁离开竹竿要多长时间?
分析:
最直接也是最笨的方法就是对每个蚂蚁的行动进行模拟。这样谁都能想到的答案当然不是出题者想要的了。
换个角度想,2个蚂蚁碰头后掉头走实质上是等价于它们碰头后擦肩而过继续赶路。(如果你将所有蚂蚁都看作一样的话)
好了,这样一想,过程简单多了。对于每个蚂蚁,都假设竹竿上只有它一个蚂蚁,然后计算出它离开竹竿的时间。所需时间最长的蚂蚁所耗的时间就是题目的答案了。
第5题
一对情侣一起去买了一块饼
女生吃了3/7块饼
男生吃掉剩下的4/7块饼
男生比女生多出了4.5元
请问这块饼多少元?
分析:
4.5元(有回答31.5的么?举个手?)
二进制与三进制的趣题
先来思考几个问题,并不难,各位大牛应能秒杀:
1. 小明是个卖苹果的,小红一次在小明那买N(N<1024)个苹果。小明每次都要数N个苹果给小红,唉,太麻烦了。于是小明想出了一种方法:他把苹果分在10个袋子中,则无论小红来买多少个苹果,则他都可以整袋整袋的拿给小红。问怎样分配苹果到各个袋子?
2. 有16种溶液,其中有且只有一种是有毒的,这种有毒的溶液与另一种试剂A混合会变色,而其他无毒溶液与A混合不会变色。已知一次实验需要1小时,由于一次混合反应需要使用1个试管,问最少使用多少个试管可以在1小时内识别出有毒溶液?
3. 27个小球。其中一个比其他小球都要重一点。给你一个天平,最多称3次,找出这个特殊的小球。
4. 有12个颜色大小一模一样的小球,已知其中只有一只重量有些微差别(提示:但并不知到底是重还是轻哦),现在用一个没有砝码的天平,最多称三次把这个特殊的小球找出来。
5. 小莫有一个40磅的砝码,一次失手掉到地上,结果摔成了4块,心痛啊。但他却意外的发现这4块砝码碎片可以在天平上称1~40间的任意整数重量了,问4块的重量各是多少?
6. 将区间 [0,1] 平均分为3段,挖去中间的一段,即去掉 ( 1/3 , 2/3 ) ,然后将剩下的两段同样各自挖去中间1/3 。这样无限挖下去,问区间中[ 0 , 1 ] 中是否有永远不被挖掉的点?如果有,这些点的坐标有什么规律?
答案在下面,请先思考然后看答案!
解答:
发现错误或有更好解决方法的可留言告诉我,谢谢。第1、2题涉及二进制思想,大家平常都比较熟悉了,算是热热身。后面4题需要用到三进制和所谓的“平衡三进制”思想来解决,挺有趣的。
问题1:
答案:按1,2,4,8,16,.......,512
分析:
第一个问题用二进制编码思想可以轻松解决,相信学计算机的各位不会有什么困难。
按照二进制编码的特点, n位二进制数的各个数位的权重从低到高分别是2^0 ,2^1 , 2^2 ,…… 2^( n – 1 ) 。 n位无符号二进制数可以表示0到(2^n)- 1 ,共n个数。
而二进制数位只有1和0两种状态,正好对应题目中苹果袋子的“给”与“不给”两种状态。因此只要将各个袋子分别装入 2^0 , 2^1 , 2^2 , …… , 2^9 个苹果即可满足题目要求。例如:需要66个苹果, 因66的二进制是 1000010 ,则小明只要将苹果个数为2^1(2个) 和2^6(64个)的袋子给小红就可以了。
问题2:
答案与分析:
如果没有1小时的时间限制,那么利用二分搜索的思想既可以解决问题。( 第一次取16种溶液中的8种放入一个试管,然后加入试剂A,看有没有反应,根据结果再进行细分 。 这样只需4个试管,但是需要4个小时 )有了这个1小时的时间限制后这种方法就不管用了。一种正确的解答如下:
首先,将16种溶液编号为0到15 ,编号的二进制形式表示如下:
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
然后,取4个试管,第一个试管加入编号二进制形式中第一位(指最低位)是1的溶液,第二个试管加入编号第二位是1的溶液,其他2个试管分别加入编号第3,4位为1 的溶液。然后再将试剂A加入4个试管中,看那些试管发生了反应,就可以知道有毒溶液的编号了。例如:第1、2、4号试管内发生了反应,则我们知道是第7号溶液是有毒的。原因是7的二进制编码是1011,因此7号溶液是唯一加入了1、2、4号试管,而没有加入3号试管的溶液。
问题3:
答案与分析:
第3个问题可以使用三进制的原理来解决。先说说三进制,与二进制类似,三进制各个数位的权重分别为3^0 ,3^1 , 3^2 ,……., 3^n 。三进制用0 , 1 , 2 这3个数码表示数 ,因此每个三进制数位有3种状态。
对于每一次天平称量的结果有3种:左边较重、右边较重、平衡。我们可以将左边较重编号为1,右边较重编号为2,平衡编号为0 。
首先将27个小球按照0到26编号,编号的三进制的形式如下:
000
001
002
010
011
012
020
021
022
100
101
102
110
111
112
120
121
122
200
201
202
210
211
212
220
221
222
第一称量将编号的三进制第1位为1的小球(9个)放在左边,编号第1位为2的小球(9个)放在右边,编号第1位为0的不放。
第二次称量将编号的三进制第2位为1的小球(9个)放在左边,编号第2位为2的小球(9个)放在右边,编号第2位为0的不放。
第三次称量将编号的三进制第3位为1的小球(9个)放在左边,编号第3位为2的小球(9个)放在右边,编号第3位为0的不放。
好了,根据3次称量的结果,我们就可以知道较重的那个小球的编号了。假设3次称量结果的编号分别为0,1,2 ,那么我们可以知道较重的是21号小球。因为21的三进制是( 210 ) ,因此只有21号小球在第一次称量时没放,第二次放在左边,第三次放在右边。
问题4:
答案与分析:
问题4算是问题3的升级版本吧。
如果知道异样小球比其他小球轻或重,那么就好办了,只要将12个小球分为4,4,4三堆,称3次是可以找到异样小球的,方法很简单,就啰嗦了。
但是题目说明不知道异样小球究竟是偏轻还是偏重,上面的方法就不灵了。一种可行的解法如下:
假设异样小球比正常小球要重,从12个中抽取N个小球出来,包含异常小球的组合总是比不包含异常小球的组合要重。
将12个小球按编号为3进制的(000)至(102),如下:
000
001
002
010
011
012
020
021
022
100
101
102
为了方便下面的讨论,先假设异常小球的编号是XYZ,那我们的目标就转化为如何称3次来确定X,Y,Z的值。我们找出异样小球的思路就是,通过称量来不断的缩小范围,最终推理出异常小球的编号。
注意到编号中最低位为0,为1和2的各有4个。因此将最低位为1与2的分别放在天平两边称一次。根据第一次称的结果分为下面两种情况:
(1)若第一次称量时天平不平衡,则异样小球必然在编号最低位为1或2的小球中,即Z等于1或2 。
最低位为1或2的编号有下面8个:
001
002
011
012
021
022
101
102
于是我们就将搜索范围缩小到上面的8个小球中了。
注意到在这8个数中第二位为1和2的各有2个。就是下面这4个:
011
012
021
022
因此第二次称量时,将上面列出的五个数中第二位为1和2的分别放天平两边。
根据第二次称量的结果,可分为下面两种情况:
<1>第二次称量时天平不平衡,那么我们可以肯定异样小球必然在第二位编号为1或2的小球中,Y等于1或2 。
不妨假设小球 011 + 012 > 021 + 022
假设第一次称量结果是最低位为1的小球比最低位是2的要重,那么我们可以肯定011号小球偏重或022号小球偏轻。
那么第三次称量只需将011号或022号中任意一个与其他任意一个小球称量,若平衡则是正常小球,否则就是异常小球了。
<2>第二次称量时天平平衡,则我们可以肯定异常小球编号第二位必然是0 。然后你可以仿照上面的做法通过编号的最高位来找出异常小球的编号。
(2)若第一次称量时天平平衡,则异样小球编号的最低位必然是0 。同样你可以参考上面的思路通过编号的第2,3位来找到异样小球,这里就不啰嗦了。
另有这个问题的另一种解法供参考:http://blog.sina.com.cn/s/blog_49d0731a010007i0.html。
问题5:
答案:1,3,9,27
分析:
第5个问题就是所谓“德•梅齐里亚克的砝码问题”(The Weight Problem of Bachet de Meziriac) 。
这里涉及到所谓“平衡三进制”的问题。平衡三进制,也叫对称三进制,是一种以3为基数,各个三进制位权重为3^0,3^1,3^2…….,3^n ,以 -1,0,1为基本数码的三进制计数体系。n位三进制数表示的范围是 -((3^n) -1)/2 ~ ((3^n) -1)/2 。
需要明白的是,一个砝码可以放在要称量的物品的同侧,也可以放在对侧,当然也可以不放。砝码的三种状态可以表示为:不放 ( 0 )、放在物品对侧( +1 )、放在物品同侧 ( -1 ) 。
因此各个砝码碎片的重量就是各个平衡三进制数位的权重( 3^0 , 3^1 , 3^2 , 3^3 ),即 1 , 3 , 9 , 27 。
总结一下,上面1,2题利用二进制原理解决,而3,4,5题利用三进制原理解决。总的来说原理是一样的,核心的区别在于二进制数位有2种状态,三进制数位有3种状态。 (废话!)
问题6:
答案:康拓三分集
分析:
首先用三进制数表示[0,1]间的小数,并将其画在数轴上。你会发现第一次其实是挖掉了所有小数点后第1位为1的所有数,而第二次则是挖掉了小数点后第2位为1的所有数,按此类推。
实质上就是挖去了三进制表示法中所有含有数位1的数。因此剩余的数就是[0,1]区间上三进制表示法中不包含1的所有数的集合。这个集合就是所谓的康拓三分集。
有趣的是:康拓三分集中元素的个数实质上是跟区间[0,1]上的实数个数是一样多的(严格的表述应该是“等势”)!
若集合A与集合B的元素可以建立一种“一一对应”关系,则我们说A与B“等势”。例如:偶数集E跟自然数集N是等势的,因为对于偶数集中的任何一个数a,都可以在自然数集中找到一个数a/2与之相对应,反之也成立。
下面来简单证明康拓三分集跟[0,1]区间是等势的。
首先用二进制表示法来表示[0,1]区间中的小数。
然后将数位中所有“1”变为“2”,这样在数位上就跟康拓三分集中的一个数完全一致了。反过来,将康拓三分集中的任一个数(二进制表示)中的全部“2”变为“1”,就唯一的对应[0,1]区间的一个二进制小数。因此,康拓三分集与 [0,1]可以建立一一对应关系,因而是等势的。
整体= 部分。 很神奇吧?一旦到了无穷的领域就会出现很多有趣的东西,例如,你可以证明一小段线段跟一条直线上的点是等势的,完全平方数集合跟自然集是等势的,等等。
最佳答案分三组:每组四个,第一组编号1-4,第二组5-8,第三组9-12.
第一次称:天平左边放第一组,右边放第二组。
A 第一种可能:平衡。则不同的在第三组。
接下来可以在左边放第9、10、11号,右边放1、2、3号三个正常的。
a.如果平衡,则12号是不同的;
b.如果左重右轻,则不同的在9、10、11号中,而且比正常球重。再称一次:9放左边,10放右边,如果平衡,则11号是不同的;如果左重右轻,则9号是不同的,如果右重左轻,则10号是不同的。
c.如果左轻右重,道理同b
B 第二种可能:左重右轻,则不同的在1-8号中,但不知比正常的轻还是重。
第二次称:左边放1、2、5号,右边放6、9、3号。
a.如果平衡。则不同的在4、7、8中。可以称第三次:左边放4、7,右边放9、10。如果平衡,则8是不同;如果左重右轻,则4是不同;如果左轻右重,则7是不同。
b.仍然左重右轻。则不同的在位置没有改变的1、2、6中。可以称第三次:左边放1、6,右边放9、10。如果平衡,则2是不同; 如果左重右轻,则1是不同;如果左轻右重,则6是不同。
c:左轻右重。则不同的在5、3、中,因为只有它们改变了原来的位置。可以称第三次:左放5,3,右放9,10。如果左轻右重,则5是不同,如果左重右轻,则3是不同。
C 第三种可能:左轻右重,道理同B
至此,不论发生任何情况,称三次都可以找出不同,而且知道比正常的轻了还是重了。