程序员必备智力题集锦 (典藏版)
Posted 大数据梦想家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员必备智力题集锦 (典藏版)相关的知识,希望对你有一定的参考价值。
前言
大家好,我是 梦想家 Alex 。在我技术群的小伙伴们都知道,我从今年 3月8日 开始,在技术群里发起了一个计划 。为了跟其他技术群有所区别,并且能调动得起大家的学习热情,我成立了一个出题组。每天早上,我会让管理员在技术群里的公告栏放上3道题目,分别是1道基础题,1道思考题和1道智力题,所有的答案均为群友讨论得出。后面为了让题目更加丰富,我们还添加过算法题,SQL题 。 一直积累到 8月份,这个日更计划暂时停止,但是我们的题库已经积攒了不少的题目。一开始我的想法是这个在线的知识库只对我们技术群的朋友开放,但是后面想到可以 精选出好的问题开放给更多的朋友,一起参与学习和思考 ,于是我便想到了用文章来记录的方式来打破壁垒。所以,我开设了“每日主题讨论”专栏,想用有限的文章,为大家带去更多的思考。本期文章,我为大家带来的是一点轻松愉快的内容,那便是 常见的智力题集锦
题目
NO.1
一个大小为 N 的数组,所有数都是不超过 N-1 的正整数,用O(N)的时间找出重复的那个数(假设只有一个)。一个大小为 N 的数组,所有数都是不超过 N+1 的正整数。用O(N)的时间找出没有出现的那个数(假设只有一个)。
NO.2
有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?
NO.3
一个猎人带着一只羊,一只狼和一颗白菜回家,路上遇到一条河。河边只有一条船,但船太小,一次最多只能载猎人和另外一样东西过河。但猎人不在时,狼要吃羊,羊要吃白菜。问怎样才能把狼,羊,白菜安全运过河?
NO.4
有个商人雇用了一位手艺高超的工匠了为他做一个精致产品,工作一星期七天的代价是一条金条。商人手头上有一条金条,刚好有可以付工匠一星期的工钱。但工匠要求工钱要按每天来付。虽然他并不急着用钱,每天有钱进账,老人心里总是踏实一些。但商人家中有个规矩,金条每星期只能切二刀。后来商人想出以了个切割金条的办法,满足了工匠的要求。你知道商人是怎么切割金条才能满足工匠的吗?
NO.5
请找出规律:1,11,21,1211,111221,下一个数是什么?
NO.6
在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分那个开关控制那一盏灯?
NO.7
你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?
NO.8
30枚面值不全相同的硬币摆成一排,甲、乙两个人轮流选择这排硬币的其中一端,并取走最外边的那枚硬币。如果你先取硬币,能保证得到的钱不会比对手少吗?
NO.9
某种药方要求非常严格,你每天需要同时服用A、B两种药片各一颗,不能多也不能少。这种药非常贵,你不希望有任何一点的浪费。一天,你打开装药片A的药瓶,倒出一粒药片放在手心;然后打开另一个药瓶,但不小心倒出了两粒药片。现在,你手心上有一颗药片A,两颗药片B,并且你无法区别哪个是A,哪个是B。你如何才能严格遵循药方服用药片,并且不能有任何的浪费?
NO.10
有栋建筑物高100层。若从第N层或更高的楼层扔下来,鸡蛋就会破掉。若从第N层以下的楼层扔下来则不会破掉。给你2个鸡蛋,请找出N,并要求最差情况下扔鸡蛋的次数为最少?
NO.11
有7克、2克砝码各一个,天平一只,如何只用这些物品五次内将140克的盐分成50、90克各一份?
NO.12
有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。
NO.13
一个装了10L水的桶,一个7L的空桶,一个3L的空桶,怎样变成2个5L
NO.14
实验室里有1000个一模一样的瓶子,但是其中的一瓶有毒。可以用实验室的小白鼠来测试哪一瓶是毒药。如果小白鼠喝掉毒药的话,会在一个星期的时候死去,其他瓶子里的药水没有任何副作用。请问最少用多少只小白鼠可以在一个星期以内查出哪瓶是毒药
NO.15
有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间 。
NO.16
岛上有 100 个囚犯,他们都是蓝眼睛,但是他们都只能看到别人眼睛的颜色, 并不能知道自己的眼睛颜色,而且他们之间不能去谈论眼睛颜色的话题,规定每天晚上都可 以有一个人去找守卫说出自己的眼睛颜色,如果错了被杀死,如果对了被释放。但是大家在 没有十足的把握前都不敢去找守卫,有一天,一个医生对他们说你们之中至少有一个蓝眼睛, 然后 N 天,这些人都获救了,为什么?这句话对他们有什么影响 ?
NO.17
54张扑克牌,其中有十张是翻过来的。现在把你的眼睛蒙上,让你把扑克牌分成两叠(两叠的多少可以不一样)。要求在两叠中翻过来的扑克牌是相等的。请问该怎么做?
NO18.
古时候有一位商人要让伙计将一个精致的花瓶送到买主的手里。买主住在很远的地方,路途中间要经过土匪出没的地方。土匪要是见到花瓶就会抢走。但土匪不会打开锁着的东西,只要把花瓶锁在箱子里就可以安全地送到目的地(这土匪看起来还很文明)。所以商人准备了一个大箱子,在箱子上装了个很大很结实的的锁扣,足以挂几把锁。商人还准备了一把精致的铁锁将花瓶锁在箱子里。这把铁锁的钥匙是独一无二的,没有这把钥匙,按照当时的技术箱子是绝对打不开的。但问题来了,土匪只要见到钥匙就会没收。钥匙都是没法安全地送到买主的手里的。买主也不能把自己的锁送给卖主用。在几经周折后,买主终于得到了他心爱的花瓶。请问这花瓶是如何送到买主的手里的?
NO.19
假设在桌上有三个密封的盒,一个盒中有2枚银币(1银币=10便士),一个盒中有2枚镍币(1镍币=5便士),还有一个盒中有1枚银币和1枚镍币。这些盒子被标上10便士、 15便士和20便士,但每个标签都是错误的。允许你从一个盒中拿出1枚硬币放在盒前,看到这枚硬币,你能否说出每个盒内装的东西呢?
NO.20
有50家人家,每家一条狗。有一天警察通知,50条狗当中有病狗,行为和正常狗不一样。每人只能通过观察别人家的狗来判断自己家的狗是否生病,而不能看自己家的狗,如果判断出自己家的狗病了,就必须当天一枪打死自己家的狗。结果,第一天没有,第二天没有,第三天开始一阵枪响,问:一共死了几条狗?
NO.21
有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜子都有一张商标纸连着。两位盲人不小心将八对袜子混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?
NO.22
走廊上有100个关上的储物柜。有个人先是将100个柜子全都打开。接着,每数两个柜子关上一个。然后,在第三轮时,再每隔两个就切换第三个柜子的开关状态(也就是将关上的柜子打开,将打开的关上)。照此规律反复操作100次,在第 i 轮,这个人会每数 i 个就切换第 i 个柜子的状态。当第100 轮经过走廊时,只切换第100个柜子的开关状态,此时有几个柜子是开着的 ?
OK,以上就是我从技术群题库里精选出来关于智力题的集锦,不知道大家能回答上来几道题呢~
接下来,我就要揭秘答案了
答案
NO1.
计算数组中的所有数的和,再计算出从1 到 N-1 的所有数的和,两者之差即为重复的那个数。计算数组中的所有数的和,再计算出从1到 N+1的所有数的和,两者之差即为缺少的那个数。
NO2.
不用考虑小鸟掉头的情况
实际飞行距离 = 两车相遇时间间隔 * 小鸟飞行速度
假设两地相距的距离为 x,那么两车相遇的时间间隔为
x ( 15 + 20 ) \\frac{x}{(15+20)} (15+20)x
小鸟飞行的距离为 数学公式: $ \\frac{x}{(15+20)} * 30 $ ,也就是
6 x 7 \\frac{6x}{7} 76x
NO3.
第一次过河,带羊;
回来;
第二次过河,带狼;
带羊回来;
第三次过河,带白菜;
回来;
第四次过河,带羊
NO4.
切两刀,
1,2,4三段
第一天给1,
第二天给2要回1,
第三天给1+2,
第四天给4,要回1+2
…
NO5.
奇数位: 表示数字的个数,
偶数位: 表示数字
1
11:代表上个数字1个1
21:代表上个数字2个1
1211:代表上个数字1个2,1个1
111221:代表上个数字是1个1,1个2,2个1。
所以下个数字应该是:
312211
NO6.
先在门外开启一个开关,让灯亮一会儿,再关闭,接着再开启一个开关,让灯一直亮着,进入房门,亮着的灯的开关知道了,然后再用手摸一下,那个灯泡是热的,就知道另外一个开关,最后就是最后一个开关了。
NO7.
设未被污染的每个药丸的重量是x,则被污染的每个药丸的重量是x+1。将4个罐子分别标注为1、2、3、4,取一号罐子1个药丸,二号罐子2个药丸,三号罐子3个药丸,四号罐子4个药丸,一起称重,则:
若一号罐子药丸被污染,则重量为(10x+1)
若二号罐子药丸被污染,则重量为(10x+2)
若三号罐子药丸被污染,则重量为(10x+3)
若四号罐子药丸被污染,则重量为(10x+4)
结论:不论哪种情况,我们只需要对10取模,即可得到结果
NO8.
取者可以让自己总是取奇数位置上的硬币或者总是取偶数位置上的硬币。数一数是奇数位置上的面值总和多还是偶数位置上的面值总和多,然后总是取这些位置上的硬币就可以了。
NO9.
把三颗药丸都分成两半,从每一颗都拿一半出来分成两份,这样每份就包含一颗B和半颗A,然后再去A药片里面拿一颗分成两半放入刚分好的两份中就可以满足题意
NO10.
①假设最坏情况下得到的下落次数为x,那么第一枚鸡蛋从哪层扔好呢,显然是x。因为这样如果在第x层碎了,那么第二枚鸡蛋需要x-1次确定N,加上第一枚的一次,就是x次。那假如没碎呢,第二次我又从哪层扔呢,自然是x+(x-1)层。因为这样如果第一枚在这层碎了,那第二枚就需要x-2次确定N,总共是x-2+2=x次,以此类推,而总共又只有100层,得到一个不等式x+(x-1)+(x-2)+…+1 >= 100解得x=14
②动态规划:
当第一个鸡蛋从第x层扔时,用(k,n)表示状态,其中 k 为鸡蛋数,n 为楼层数
- 如果鸡蛋不碎,那么状态变成 (k, n-x),即我们鸡蛋的数目不变,但答案只可能在上方的 n-x层楼了。原问题缩小成了一个规模为 (k, n-x) 的子问题
- 如果鸡蛋碎了,那么状态变成 (k-1, x-1),即我们少了一个鸡蛋,但我们知道答案只可能在第 x 楼下方的 x-1层楼中了。原问题缩小成了一个规模为 (k-1, x-1) 的子问题
NO11.
最佳解法:
①把140g盐均分得到两份70g
②7g+2g砝码与70g盐-> 9g盐和61g盐
③9g盐+2g砝码与61g盐->50g盐。
NO12.
首先给药瓶编号1至20,然后对应取出编号数量的药丸称重。
如果所有药瓶都是1克,那最后总重量应该是1+2+…+20=210克,根据题意,最后重量m肯定肯定大于210克。而多出来的重量一定是出自1. 1克的那瓶。于是用m减去210,再除以1. 1-1=0. 1就可以得到对应1. 1克那瓶的编号
NO13.
过程 | 10L(A) | 7L(B) | 3L(C) |
---|---|---|---|
初始 | 10 | 0 | 0 |
A->B->C | 3 | 4 | 3 |
C->A | 6 | 4 | 0 |
B->C | 6 | 1 | 3 |
C->A | 9 | 1 | 0 |
B->C | 9 | 0 | 1 |
A->B | 2 | 7 | 1 |
B->C | 2 | 5 | 3 |
C->A | 5 | 5 | 0 |
NO14.
首先给1000瓶子按10位二进制编号,然后最右位为1的瓶子喂给1号老鼠,右起第二位是1的瓶子喂给2号老鼠…
这样根据最后老鼠的状态就可以确定对应位上的数字,比如说1号老鼠死亡,那么确定毒药瓶的编号最右位是1,2号老鼠存活,毒药瓶右起第2位是0… 从而确定毒药瓶的编号
NO15.
先同步把一根香的两端都点燃,另外一根香的一端也点燃。等到第一根香燃烧完,再同步把第2根香的另外一端点燃,此时第2根燃完就为15分钟
NO16.
如果只有一个蓝眼人,那么他原本看不到蓝眼人,听到医生的话,就知道了医生说的蓝眼人就是自己,因此他在当天晚上找守卫说自己是蓝眼睛。
由此可以推出,如果有两个蓝眼人,那么他们原本都只看到一个蓝眼人,听到医生的话,都会想:对方是不是岛上唯一的蓝眼人?如果是的话,那么一天后他应该发现对方已经被释放。但过了一天没人被释放,因此两人都明白了,对方没被释放是因为岛上还有一个蓝眼人,就是自己。因此,在医生讲话的第二天晚上,这两人会一起被释放。
这是个递归逻辑。各位想想,如果有三个蓝眼睛,那第二天当晚这三个蓝眼睛就同时被释放。
如果是四个蓝眼睛,那第三天当晚这四个蓝眼睛就同时被释放。
依次类推,100个蓝眼睛,第99天当晚全部被释放。
NO17.
- 分两组,A组 44 张,B组 10 张
- 反转B组所有牌
假设翻转后的 10 张中随机分到B组的是 x 张,那么A组就是10-x 张,B组总共10张,那么将B组再次翻转后也是10-x 张,相等
NO18.
商人加一把锁,钥匙自己留着,伙计把箱子送给买主。买主收到箱子,再加一把自己的锁,钥匙自己留着。然后,伙计把箱子再送给商人,商人把自己的锁打开,伙计最后再把箱子送给买主,买主打开自己的锁就可以得到花瓶了。
这种思想也是多方安全计算里面双向随机加密常用到的方法。
NO19.
现在有3个盒子,分别装有如下物品,以及对应的价值如下:
a 两枚银币 价值:20
b 两枚镍币 价值:10
c 一枚银币一枚镍币 价值: 15
我们只需要从 c 盒子中拿,如果出现银币,根据题意,说明它的标签是2枚银币,剩下的互换,盒子写10便士的是a,写15便士的是b
NO20.
死了3条(第几天枪响就有几条)。
从有一条不正常的狗开始,显然第一天将会听到一声枪响。这里的要点是你只需站在那条不正常狗的主人的角度考虑。
有两条的话思路继续,只考虑有两条不正常狗的人,其余人无需考虑。通过第一天他们了解了对方的信息。第二天杀死自己的狗。换句话说每个人需要一天的时间证明自己的狗是正常的。有三条的话,同样只考虑那三个人,其中每一个人需要两天的时间证明自己的狗是正常的狗。
NO21.
如果让盲人成对的去拿,不能保证刚好拿的是两对黑和两对白。正确分法是:
把袜子拆开,每人随便拿一只,注意要每拆一对,两人就要分一次。这样就能保证每人拿到4只黑袜,4只白袜。
NO22.
要解决这个问题,我们必须弄清楚所谓切换储物柜开关状态是什么意思。这有助于我们推断最终哪些柜子是开着的。
- 问题:柜子会在哪几轮切换状态(开或关)?
柜子n会在n的每个因子(包括1和n本身)对应的那一轮切换状态。也就是说,柜子15会在第1、3、5和15轮开或关一次。(i=1开,3关,5开,15关。因子个数:偶数关,奇数开)- 问题:柜子什么时候还是开着的?
如果因子个数(记作x)为奇数,则这个柜子是开着的。你可以把一对因子比作开和关,若还剩一个因子,则柜子就是开着的。- 问题:x什么时候为奇数?
若n为完全平方数,则x的值为奇数。理由如下:将n的两个互补因子配对。例如,如n为36,则因子配对情况为:(1, 36)、(2, 18)、(3, 12)、(4, 9)、(6, 6)。注意,(6, 6)其实只有一个因子,因此n的因子个数为奇数。- 问题:有多少个完全平方数?
一共有10个完全平方数,你可以数一数(1、4、9、16、25、36、49、64、81、100),或者,直接列出1到10的平方:
1 * 1, 2 * 2, 3 * 3, …, 10 * 10
因此,最后共有10个柜子是开着的
小结
实际上这只是我整理的知识库中的一小部分内容,后续我也会将更多精彩的主题集锦发布出来,期待大家可以多多关注,来个一键三连就更好了~ 另外,我也是一枚喜欢阅读,输出,复盘的大数据爱好者。热衷于分享大数据基础原理,技术实战,架构设计与原型实现之外,还喜欢输出一些有趣实用的编程干货内容,与阅读心得 … 如果感兴趣我整理的干货内容,可以关注下方我的公众号卡片「大数据梦想家」,相信一定会有你想要找寻的宝藏~
以上是关于程序员必备智力题集锦 (典藏版)的主要内容,如果未能解决你的问题,请参考以下文章