程序员常见智力题30道
二进制问题
金条问题
有个商人雇用了一位手艺高超的工匠了为他做一个精致产品,工作一星期七天的代价是一条金条。商人手头上有一条金条,刚好有可以付工匠一星期的工钱。但工匠要求工钱要按每天来付。虽然他并不急着用钱,每天有钱进账,老人心里总是踏实一些。但商人家中有个规矩,金条每星期只能切二刀。后来商人想出以了个切割金条的办法,满足了工匠的要求。你知道商人是怎么切割金条才能满足工匠的吗?
切成1、2、4。这三个二进制数的组合能表示0-7中的任何一个。
老鼠和毒药
实验室有100个瓶子,其中有一瓶装有慢性毒药(第3天发作),另外99瓶装有蒸馏水。请问至少需要多少只小白鼠才能在3天内找出哪一瓶是慢性毒药?
利用二进制来做,最少的老鼠数量就是计算2的多少次方大于等于瓶子数量,例如本题为7。对100瓶进行二进制编码,这样可以排列出1xxxxxx,x1xxxxxx,...,xxxxxx1这样的七组序列,如果是1xxxxxx和x1xxxxx的老鼠死了,表示1100000有毒。
水桶问题
倒水问题1
一个装了10L水的桶,一个7L的空桶,一个3L的空桶,怎样变成2个5L
初始时为10,0,0。
第二步7,0,3。
然后7,3,0。
然后4,3,3。
然后4,6,0。
然后1,6,3。
然后1,7,2。
然后8,0,2。
然后8,2,0。
然后5,2,3。
然后5,5,0。
倒水问题2
如果你有无穷多的水,一个3夸脱的和一个5夸脱的提桶,你如何准确称出 4夸脱的水?
初始时0,5
然后3,2
然后0,2
然后2,0
然后2,5
然后1,4
舀酒问题
据说有人给酒肆的老板娘出了一个难题:此人明明知道店里只有两个舀酒的勺子,分别能舀7两和11两酒,却硬要老板娘卖给他2两酒。聪明的老板娘毫不含糊,用这两个勺子在酒缸里舀酒,并倒来倒去,居然量出了2两酒,聪明的你能做到吗?
初始0,11
然后7,4
然后0,4
然后4,0
然后4,11
然后7,8
然后0,8
然后7,1
然后0,1
------
然后1,11
然后7,5
然后0,5
然后5,0
然后5,11,
然后7,9
然后0,9
然后7,2
钱问题
赚钱问题
一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?
-8+9-10+11=2
假钱问题
老王30买了双鞋,35卖,客人花100买,老王没零钱于是向老李换了100.补给客人后,客人走远后老李突然说是假钱,于是老王补偿给了老李,问老王一共亏了多少?
卖鞋赚了35-30=5
假钱赔了100
一共亏95
取硬币问题
30枚面值不全相同的硬币摆成一排,甲、乙两个人轮流选择这排硬币的其中一端,并取走最外边的那枚硬币。如果你先取硬币,能保证得到的钱不会比对手少吗?
先取者可以让自己总是取奇数位置上的硬币或者总是取偶数位置上的硬币。数一数是奇数位置上的面值总和多还是偶数位置上的面值总和多,然后总是取这些位置上的硬币就可以了。
旅馆问题
有三个人去住旅馆,住三间房,每一间房30,第二天,老板觉得三间房只需要5给三位客人,谁知小弟贪心,只退回每人2,这样一来便等于那三位客人每人各花了九元,于是三个人一共花了2,总共是30那么还有$1呢?
他们所消费的27元里已经包括小弟贪污的2元了,再加退还的3元=30元。:这30元现在的分布是:老板拿25元,伙计拿2元,三人各拿1元,正好!
蓝眼问题
蓝眼睛问题
有个岛上住着一群人,有一天来了个游客,定了一条奇怪的规矩:所有蓝眼睛的人都必须尽快离开这个岛。每晚8点会有一个航班离岛。每个人都看得见别人眼睛的颜色,但不知道自己的(别人也不可以告知)。此外,他们不知道岛上到底有多少人是蓝眼睛的,只知道至少有一个人的眼睛是蓝色的。所有蓝眼睛的人要花几天才能离开这个岛?
有多少个蓝眼睛的人就会花多少天。
c=1
假设岛上所有人都是聪明的,蓝眼睛的人四处观察之后,发现没有人是蓝眼睛的。但他知道至少有一人是蓝眼睛的,于是就能推导出自己一定是蓝眼睛的。因此,他会搭乘当晚的飞机离开。
c=2
两个蓝眼睛的人看到对方,并不确定c是1还是2,但是由上一种情况,他们知道,如果c = 1,那个蓝眼睛的人第一晚就会离岛。因此,发现另一个蓝眼睛的人仍在岛上,他一定能推断出c = 2,也就意味着他自己也是蓝眼睛的。于是,两个蓝眼睛的人都会在第二晚离岛。
c>2
逐步提高c时,我们可以看出上述逻辑仍旧适用。如果c = 3,那么,这三个人会立即意识到有2到3人是蓝眼睛的。如果有两人是蓝眼睛的,那么这两人会在第二晚离岛。因此,如果过了第二晚另外两人还在岛上,每个蓝眼睛的人都能推断出c = 3,因此这三人都有蓝眼睛。他们会在第三晚离岛。
不论c为什么值,都可以套用这个模式。所以,如果有c人是蓝眼睛的,则所有蓝眼睛的人要用c晚才能离岛,且都在同一晚离开。
疯狗问题(跟蓝眼睛一样)
有50家人家,每家一条狗。有一天警察通知,50条狗当中有病狗,行为和正常狗不一样。每人只能通过观察别人家的狗来判断自己家的狗是否生病,而不能看自己家的狗,如果判断出自己家的狗病了,就必须当天一枪打死自己家的狗。结果,第一天没有***,第二天没有***,第三天开始一阵枪响,问:一共死了几条狗?
死了3条(第几天枪响就有几条)。
从有一条不正常的狗开始,显然第一天将会听到一声枪响。这里的要点是你只需站在那条不正常狗的主人的角度考虑。
有两条的话思路继续,只考虑有两条不正常狗的人,其余人无需考虑。通过第一天他们了解了对方的信息。第二天杀死自己的狗。换句话说每个人需要一天的时间证明自己的狗是正常的。有三条的话,同样只考虑那三个人,其中每一个人需要两天的时间证明自己的狗是正常的狗。
耳光问题(跟蓝眼睛一样)
一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
答案:有三个人戴黑帽。假设有N个人戴黑帽,当N=1时,戴黑帽的人看见别人都为白则能肯定自己为黑。于是第一次关灯就应该有声。可以断定N>1。对于每个戴黑帽的人来说,他能看见N-1顶黑帽,并由此假定自己为白。但等待N-1次还没有人打自己以后,每个戴黑人都能知道自己也是黑的了。所以第N次关灯就有N个人打自己。
时间问题
蜡烛燃烧问题
两根蜡烛,燃烧完都需要1小时,怎么确定15分钟是多久?
点燃第一根的一端,第二根的两端。
第二根烧完代表半小时后,点燃第一根另一端,烧完代表15分钟。
重量问题
乒乓球重量
8个乒乓球,其中一个重,有一个秤,问至少几次能够找出重的那个乒乓球
2次,分成3堆,3,3,2。
①称3和3,如果一样重,代表重的在2。②称2个那一堆的。
①称3和3,不一样重,重的在3里面重的那堆。②3个里面随便取2个,一样重,第三个重。不一样重,重的那个就是。
盐重量问题
有7克、2克砝码各一个,天平一只,如何只用这些物品五次内将140克的盐分成50、90克各一份?
第一次:先分成70和70
第二次:通过7和2砝码将70分成9和61
第三次:通过9克盐和2砝码将61分成50和11
药丸问题
有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。
从药瓶#1取出一粒药丸,从药瓶#2取出两粒,从药瓶#3取出三粒,依此类推。如果每粒药丸均重1克,则称得总重量为210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸。
药瓶的编号可由算式(weight - 210) / 0.1 得出。因此,若这堆药丸称得重量为211.3克,则药瓶#13装有较重的药丸。
药丸问题2
你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?
答:从第一盒中取出一颗,第二盒中取出2 颗,第三盒中取出三颗。 依次类推,称其总量。减去10,多的数字就是药丸罐子序号。
数学问题
概率问题1
一个家庭有两个小孩,其中有一个是女孩,问另一个也是女孩的概率(假定生男生女的概率一样)
1/3
样本空间为(男男)(女女)(男女)(女男)
A=(已知其中一个是女孩)=)(女女)(男女)(女男)
B=(另一个也是女孩)=(女女)
于是P(B/A)=P(AB)/P(A)=(1/4)/(3/4)=1/3
概率问题2
你有两个罐子,每个罐子各有若干红色弹球和蓝色弹球,两个罐子共有50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机从中选取出一个弹球,要使取出的是红球的概率最大,一开始两个罐子应放几个红球,几个蓝球?在你的计划中,得到红球的准确几率是多少?
一个罐子放1红,一个罐子放49红和50蓝,这样得到红球的概率接近3/4。
扑克牌问题
54张扑克牌,其中有十张是翻过来的。现在把你的眼睛蒙上,让你把扑克牌分成两叠(两叠的多少可以不一样)。要求在两叠中翻过来的扑克牌是相等的。请问该怎么做?
第一步,你在这54张牌中任意取出10张,现在,扑克牌分成了两叠。44张和10张;第二步,44张那叠不动,将10张这叠每张都翻过来,便得到了符合条件的两叠牌。
解释:第一步之后,设44张那叠中正面牌x张,10张那叠中正面牌则为10-x张。第二步之后,44张那叠中正面牌保持x张,10张那叠反过来了:反面牌为10-x张,正面牌x张。
扔鸡蛋问题
有栋建筑物高100层。若从第N层或更高的楼层扔下来,鸡蛋就会破掉。若从第N层以下的楼层扔下来则不会破掉。给你2个鸡蛋,请找出N,并要求最差情况下扔鸡蛋的次数为最少。
14次
首先,让我们试着从10层开始扔鸡蛋,然后是20层,等等。
如果鸡蛋1第一次扔下楼(10层)就破掉了,那么,最多需要扔10次。
如果鸡蛋1最后一次扔下楼(100层)才破掉,那么,最多要扔19次(10、20、…、90、100层,然后是91到99层)。
这么做也挺不错,但我们只考虑了绝对最差情况。我们应该进行“负载均衡”,让这两种情况下扔鸡蛋的次数更均匀。 我们的目标是设计一种扔鸡蛋的方法,使得扔鸡蛋1时,不论是在第一次还是最后一次扔下楼才破掉,次数越稳定越好。
(1) 完美负载均衡的方法应该是,扔鸡蛋1的次数加上扔鸡蛋2的次数,不论什么时候都一样,不管鸡蛋1是从哪层楼扔下时破掉的。
(2) 若有这种扔法,每次鸡蛋1多扔一次,鸡蛋2就可以少扔一次。
(3) 因此,每丢一次鸡蛋1,就应该减少鸡蛋2可能需要扔下楼的次数。例如,如果鸡蛋1先从20层往下扔(不破),然后从30层扔下楼(破),此时鸡蛋2可能就要扔9次(从21到29 一次次试)。若鸡蛋1再扔一次,我们必须让鸡蛋2扔下楼的次数降为8次。也就是说,我们必须让鸡蛋1从39层扔下楼。
(4) 由此可知,鸡蛋1必须从X层开始往下扔,然后再往上增加X-1层……直至到达100层。
(5) 求解方程式X + (X-1) + (X-2) + … + 1 = 100,得到X (X + 1) / 2 = 100 → X = 14。 (直接设要X次,假如X 和X-1这两次了 则再加X-2 总共还是X次, 次数总为X)
我们先从14层开始,然后是27层,接着是39层,依此类推,最差情况下鸡蛋要扔14次。
其他情况也是一样的只需要求X (X + 1) / 2 = 楼层数量的X大约值即可。
填数字
0 1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ 在横线上填写数字,使之符合要求。
要求如下:对应的数字下填入的数,代表上面的数在下面出现的次数,比如3下面是1,代表3要在下面出现一次。
正确答案是: 6 2 1 0 0 0 1 0 0 0
规律
1,11,21,1211,111221,下一个数是什么?
下行是对上一行的解释 所以新的应该是3个1 2个2 1个1 :312211
猜数字问题
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数, 甲说:“我猜不出”, 乙说:“我猜不出”, 甲说:“我猜到了”, 乙说:“我也猜到了”, 问这两个数是多少?
3和4。设两个数为n1,n2,n1> =n2,甲听到的数为n=n1 n2,乙听到的数为m=n1*n2,证明n1=3,n2=4是唯一解。
证明:要证以上命题为真,不妨先证n=7
1)必要性:
i) n> 5 是显然的,因为n <4不可能,n=4或者n=5甲都不可能回答不知道
ii) n> 6 因为如果n=6的话,那么甲虽然不知道(不确定2 4还是3 3)但是无论是2,4还是3,3乙都不可能说不知道(m=8或者m=9的话乙说不知道是没有道理的)
iii) n <8 因为如果n> =8的话,就可以将n分解成 n=4 x 和 n=6 (x-2),那么m可以是4x也可以是6(x-2)而4x=6(x-2)的必要条件是x=6即n=10,那样n又可以分解成8 2,所以总之当n> =8时,n至少可以分解成两种不同的合数之和,这样乙说不知道的时候,甲就没有理由马上说知道。以上证明了必要性。
2)充分性
当n=7时,n可以分解成2 5或3 4
显然2 5不符合题意,舍去,容易判断出3 4符合题意,m=12,证毕
于是得到n=7 m=12 n1=3 n2=4是唯一解。
其他问题
水果标签问题
3个箱子里面放了 苹果,梨子,苹果加梨子,标签全错误,只能选择查看一箱的水果来改正所有标签
查看贴苹果和梨标签那一个,如果拿出来的是苹果,代表这一箱只有苹果,因为如果是苹果和梨就代表标签没错了。
那么剩下的两箱就是梨,苹果和梨,剩下的标签是梨,苹果,由于标签全错,所以贴着苹果的是梨,贴着梨的是苹果和梨。
如果拿出来的是梨,同理代表这一箱只有梨。那么剩下的两箱就是苹果,苹果和梨,剩下的标签就是苹果,梨。由于标签全错,贴着苹果的就是苹果和梨,贴着梨的就是苹果。
便士标签问题(和水果标签一样)
假设在桌上有三个密封的盒,一个盒中有2枚银币(1银币=10便士),一个盒中有2枚镍币(1镍币=5便士),还有一个盒中有1枚银币和1枚镍币。这些盒子被标上10便士、 15便士和20便士,但每个标签都是错误的。允许你从一个盒中拿出1枚硬币放在盒前,看到这枚硬币,你能否说出每个盒内装的东西呢?
吃药问题
某种药方要求非常严格,你每天需要同时服用A、B两种药片各一颗,不能多也不能少。这种药非常贵,你不希望有任何一点的浪费。一天,你打开装药片A的药瓶,倒出一粒药片放在手心;然后打开另一个药瓶,但不小心倒出了两粒药片。现在,你手心上有一颗药片A,两颗药片B,并且你无法区别哪个是A,哪个是B。你如何才能严格遵循药方服用药片,并且不能有任何的浪费?
把手上的三片药各自切成两半,分成两堆摆放。再取出一粒药片A,也把它切成两半,然后在每一堆里加上半片的A。现在,每一堆药片恰好包含两个半片的A和两个半片的B。一天服用其中一堆即可。
硬币问题
如何用一枚硬币等概率地产生一个1到3之间的随机整数?如果这枚硬币是不公正的呢?
答案:如果是公正的硬币,则投掷两次,“正反”为1,“反正”为2,“正正”为3,“反反”重来。
如果是不公正的硬币,注意到出现“正反”和“反正”的概率一样,因此令“正反反正”、“反正正反”、“正反正反”分别为1、2、3,其余情况重来。另一种更妙的办法是,投掷三次硬币,“正反反”为1,“反正反”为2,“反反正”为3,其余情况重来。
灯管问题
在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分那个开关控制那一盏灯?
打开一个开关。过10分钟后关掉开关,并打开另一个开关。进屋确认可知:
亮的灯是由第二次打开的开关控制;
摸上去发热的不发亮的灯是由第一次打开的开关控制
剩下的第三盏灯是由未操作过的开关控制。
盲人问题
他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同,而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。 他们每人怎样才能取回黑袜和白袜各两对呢?
每一对分开,一人拿一只,因为袜子不分左右脚
最大钻石问题
一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?
选择前五层楼都不拿,观察各层钻石的大小,做到心中有数。后面五个楼层再选择,选择大小接近前五层楼出现过最大钻石大小的钻石。