程序员面试智力题总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DouMiaoO_Oo/article/details/74937893

版权声明:本文为 DouMiaoO_Oo 原创文章,未经允许不得转载!

分金条问题:

你让某些人为你工作了七天, 你要用一根金条作为报酬。这根金条要被分成七块。你必须在每天的活干完后交给他们一块。如果你只能将这根金条切割两次,你怎样给这些工人分?

解答:
切两次,把金条分成1/7,2/7,4/7三份,编号a,b,c.
  第一天,给a
  第二天,给b,拿回a
  第三天,给a,
  第四天,给c,拿回a,b
  第五天,给a
  第六天,给b,拿回a
  第七天,给a
  

猴子搬香蕉问题:

一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

解答:这道题如果放下香蕉回到原点不用消耗香蕉的话(题目描述不准确):
- 猴子先搬50个走的25米处,吃了25根香蕉,然后放在原地,回去搬另外50根香蕉,再搬到25米处。搬起25米处的50根香蕉往家走,回到家还剩25根香蕉。
- 如果回程也需要消耗香蕉 参考链接
前面每前进1米,就要3趟,也就是吃掉3个香蕉;当然不可能50米全部这样,因为没有150个香蕉够吃^_^
这就需要找到一个点,当小猴子拿香蕉时能拿最多的香蕉(<=50),这样它可以一次到家,不用再往返。
设Y为要求的香蕉最大剩余数,X为要求的那个点(X米),可以列出方程式:
- Y=(100-3X) - (50-X)
- (100-3X)<=50
很容易求出:Y=16

飞机加油问题:

  每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈。
  为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)

解答:(这种题如果更改了数值应该怎么分析?)
先三架飞机起飞,飞到地球1/8处,三架飞机都还有3/4的油,其中一架给另外两架每架1/4的有,然后飞回,此时,另外两架满油;
 这两架飞机飞到地球的1/4处时,两架飞机都有3/4的油,把其中一架的1/4的油给令一架,飞回,此时,最后一架满油;
 当最后一架飞机飞到地球一半时,在终点反方向去一架飞机,他们在离终点1/4处相遇,此时,第一架飞机没油,第二架还有2/4的油,给第一架1/4的油,回飞;此时,终点再起飞一架飞机,反方向飞来;
 三架飞机在离终点1/8处相遇,前两架无油,后一架还有3/4的油,分别给另两架1/4的油,一块回飞,OK了,如果基地可以加油的话,三架就ok了,如果不能,就得5架。

硬币游戏:

  16个硬币,A和B轮流拿走一些,每次拿走的个数只能是1,2,4中的一个数。
  谁最后拿硬币谁输。
问:A或B有无策略保证自己赢?

解答:递推问题,从后往前推即可。
假设到你时的硬币数如下(√表示赢,×表示输):
1. 剩1:×
2. 剩2:√,拿1即可。
3. 剩3:√,拿2即可。
4. 剩4:×
5. 剩5:√,拿1即可。
6. 剩6:√,拿2即可。
7. 剩7:×
8. 剩8:√,拿1即可
9. 剩9:√,拿2即可。
10. 剩10:×
11. 剩11:√,拿1即可
12. 剩12:√,拿2即可。
13. 剩13:×
14. 剩14:√,拿1即可
15. 剩15:√,拿2即可。
16. 剩16:×
所以先手必输

倒水问题2:

 也可以说是倒酒:)有三个酒杯,其中两个大酒杯每个可以装8两酒,一个可以装3两酒。现在两个大酒杯都装满了酒,只用这三个杯子怎么把酒平均的分给4个人喝?
 
解答:
四个人记为A、B、C、D;三个杯中的酒量用数字表示,起初为:880
1. 开始:880→853,让A喝掉3两.变为:850
2. 850→823,让B喝掉2两,变为:803.
3. 803→830→533→560→263→281,让A喝掉1两(A已喝4两完毕),变为:280
4. 280→253→550→523→820→802→703→730→433→460→163→181,让C、D各喝1两,变为:080
5. 080→053→350→323,让C、D各喝3两,B喝2两.结束

帽子问题2:

  有一个牢房,有3个犯人关在其中。因为玻璃很厚,所以3个人只能互相看见,不能听到对方说话的声音。”
  有一天,国王想了一个办法,给他们每个人头上都戴了一顶帽子,只叫他们知道帽子的颜色不是白的就是黑的,不叫他们知道自己所戴帽子的是什么颜色的。在这种情况下,国王宣布两条如下:
  1.谁能看到其他两个犯人戴的都是白帽子,就可以释放谁;
  2.谁知道自己戴的是黑帽子,就释放谁。
其实,国王给他们戴的都是黑帽子。他们因为被绑,看不见自己罢了。于是他们3个人互相盯着不说话。可是不久,心眼灵的A用推理的方法,认定自己戴的是黑帽子。您想,他是怎样推断的?

解答:假设三个分别交分情况讨论即可:
1. 如果A是白帽子:B能看见一个白帽子和一个黑帽子,应该无法判断;C能看见一个白帽子和一个黑帽子,以及沉默的B,那么C就能知道自己是黑帽子。
2. 如果A是黑帽子,A、B、C互相都不能判断保持沉默。

年龄问题:

  一普查员问一女人,“你有多少个孩子,他们多少岁?”女人回答:“我有三个孩子,他们的岁数相乘是36,岁数相加就等於隔壁那间屋子的门牌号码.”普查员立刻走到隔邻,看了一看,回来說:”我多少还需要些资料.”女人回答:“我现在很忙,我最大的孩子正在楼上睡觉.”普查员说:”谢谢,我己知道了
  问题:那三个孩子的岁数是多少。
  
解答:
因为36 = 1 × 2 × 2 × 3 × 3
所有的可能为:
1,1,36;sum = 38
1,2,18;sum = 21
1,3,12;sum = 16
1,4,9;sum = 14
1,6,6;sum = 13
2,2,9;sum = 13
2,3,6;sum = 11
3,3,4;sum = 10
由于普查员知道了年龄和之后还是不能确定每个孩子的年龄,所以可能性为
1,6,6;sum = 13
2,2,9;sum = 13
由于最大(暗含只有一个最大)的孩子在睡觉,所以只可能是
2,2,9;sum = 13

灯泡问题 ##

屋里有三个灯,门外三个开关分别控制着这三个灯。你只能开门进一次房间,问如何判断出这三个开关分别控制哪盏灯。

解答:
先开一个,停5分钟后关掉,再开另一个灯。然后就进屋进去看,现在开的亮着,刚才开的那个灯泡是热的,只剩一个就是从没开过的灯。

狼吃羊问题

故事发生在某个神奇的草原:草原上有100只狼和1只羊。狼可以吃草也可以吃羊。按照常理,狼当然更喜欢吃羊。但是,如果狼吃了羊,狼就会变成羊,从而可以被其他狼追上,并吃掉。这些狼的奔跑速度各不同,但是都非常理性。假设羊不能被两只或者更多狼分吃。
请问:羊会不会被狼吃?请写出推理过程。

解答:
羊不会被狼吃。
分析:
1. 2只狼和1只羊时,吃了羊的狼会被另一只狼吃掉,所以2只狼一只羊会稳定。
2. 3只狼和1只羊时,一只狼吃了羊后会变成情况1,所以不会被吃,则2最终会变成1
3. 4只狼和1只羊时,一只吃了羊后会变成情况2,会被其他狼吃掉,所以情况3会稳定。

递推可得:偶数只狼时,羊不会被吃掉;奇数只狼时,羊会被吃掉。

杀狗问题

一个村子里有五十个猎人,每个猎人都有一条猎狗。有一天村子里有的狗得了病,但是猎人只能看见其它人的狗是否得病,不能看见自己的狗有没有得病。猎人都很聪明,发现自己的狗得了病,就会把它枪杀掉。第一天,枪声没有响起来。第二天,枪声也没有想起来。第三天枪声响起来了。你说村子里有几条狗得了狂犬病?

解答:
1. 如果只有一条病狗,病狗的主人会发现其他49条狗都是健康的,那么第一天晚上就会有枪响。
2. 如果有两条病狗,两条病狗的主人会发现其他48条狗都是健康的,有一条是病狗。那么他们都会期待第一天晚上会有一声枪响(情况1)。但是第一天晚上没有枪响,那么第二天晚上这两个猎人会开枪杀死自己狗。
3. 如果有三条病狗,三条病狗的主人会发现其他47条狗都是健康的,有两条是病狗。那么他们都会期待第二天晚上会有两声枪响(情况2)。但是第二天晚上没有枪响,那么第三天晚上这三个猎人会开枪杀死自己狗。

老鼠试毒

有1000瓶无色无味的液体,无法从外观等区分,其中有一瓶有剧毒,服用微量第二天就会死亡。 现在有10只小白鼠, 最快多少天可以区分出哪一瓶有剧毒?
1. 编号:
给葡萄酒标上数字:1-1000;给老鼠标上:0-9; 相应给杯标上:0-9; 每只老鼠配一只相同编号的杯子。
2. 分酒:(根据2进制)
编号为1的葡萄酒分给编号为以下的杯子:0 (2^0 = 1)
编号为2的葡萄酒分给编号为以下的杯子:1 (2^1 = 2)
编号为3的葡萄酒分给编号为以下的杯子:1、0 (2^0 + 2^1 = 3)
。。。。
编号为1000的葡萄酒分给编号为以下的杯子:9、8、7、6、5、2、1、0(2^9 + 2^8 + 2^7 + 2^6 + 2^5 + 2^2 + 2^1 + 2^0 = 1000)
3. 试酒:
让老鼠喝下相同编号的杯子。
4. 找毒酒:
找出死掉的老鼠,记下其编号X、Y、Z……。
毒酒应该是编号为:2^X + 2^Y + 2^Z + ……

圆桌放置硬币

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

答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,只要后行者能放,先行者一定也有地方放。先行者必胜。

烧绳子

烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

解答:拆成1小时和15分钟。
准备两根绳子x、y,假设绳子两头分别称为a、b。x从a开始烧,y从b开始烧,同时开始直到两跟绳子烧的位置相遇,熄灭y绳子的火(如果不能熄灭就准备第3根绳子z,在z上记录下此时的位置)。然后等x烧完时(过去一个小时了),点燃绳子y的两端。等y染烧完毕刚好又过去了15分钟。

取果冻

你有一桶果冻,其中有黄色、绿色、红色三种,要求闭上眼睛取果冻。问抓取多少个就可以确定你肯定有两个同一颜色的果冻?

解答:4个

倒水问题1

如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?

答:
设3公升桶a和5公升桶b的初始状态为:0-0
1. 装满b,倒入a:0-5 -> 3-2
2. 倒空a,把b中的2升水倒入a:0-2 -> 2-0
3. 接满b再倒入a:2-5 -> 3-4
4. end

问路

一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?

解答:
问他们“你们的国家怎么走”

天平问题

12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)

解答:
一. 12个球的情况
1. 首先分为3组,设为①{A,B,C,D},②{a,b,c,d}和③{1,2,3,4}
2. ①和②称重如果:
3.
1. 两者相等,说明在③中
1. 1 从
2. 两者不等
3.
二.

药丸问题

你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?

解答:
第一个药瓶拿1个
第二个药瓶拿2个
第三个药瓶拿3个
第四个药瓶拿4个
如果是一号被污染质量为(10x+1),二号被污染质量为(10x+2)…依此类推。最后观察质量的个位数即可。

画线问题

在9个点上画10条直线,要求每条直线上至少有三个点。

解答:
①   ②   ③
   ④⑤⑥
⑦   ⑧   ⑨

重男轻女的村庄

在一个世世代代都重男轻女的村庄里,村长决定颁布一条法律,村子里没有生育出儿子的夫妻可以一直生育直到生出儿子为止,假设现在村子上的男女比例是1:1,这条法律颁布之后的若干年后村子的男女比例将会()A、男的多;B、女的多;C、一样多;D、不确定
解答:选C
根据题意,每对夫妻最后一个孩子是儿子,所以可以求出生了几个孩子的期望P(X)。
P(1) = 0.5(第一次生出了男孩)
P(2) = 0.5 ^ 2(第二次生出男孩)
……
P(1) + P(2)+…P(n),n->∞
所以孩子总数的期望就是2,又因为有一个是儿子,所以最后男女一样多

修改一个字符

只允许增加或修改一个字符,完成输出20个加号的功能。

int n = 20;

for (int i = 0; i < n; i--)
{
    printf('+');
}

解答:

  1. i- – 改为 n- –
  2. i < n 改为 i + n
  3. i < n 改为 -i < n

猜你喜欢

转载自blog.csdn.net/DouMiaoO_Oo/article/details/74937893