|
文章目录
- 1. 二进制问题
- 分金条问题
- 毒药问题
- 2. 先手必胜问题
- 轮流拿石子
- 抢30的必胜策略
- Nim游戏
- 3. 水桶问题
- 5L和6L的水桶怎么量出3L的水?
- 3L和5L的水桶怎么量出4L的水?
- 一个装了10L水的桶,一个7L的空桶还有一个3L的空桶
- 舀酒问题
- 4. 计时问题
- 漏斗计时
- 烧绳子
- 蜡烛燃烧
- 5. 赛马问题
- 25匹马5条跑道找最快的3匹马
- 64匹马8条跑道找最快的4匹马
- 6. 思维发散题:为什么井盖是圆的?
随着现在越来越卷,我们面试的时候,无论是技术岗,还是非技术岗,往往都会遇到一种特殊的题型:智力题。
有一说一,这种题目,有点恶心,有点类似于脑筋急转弯,面试官主要是想考察候选人的思维灵活性。
所以我们不但要刷leetcode,智力题最好也要有个印象,不然一问三不知就怪尴尬的,OK,一起走着吧老铁~
1. 二进制问题
分金条问题
问:工人给你打工,工作七天可以得到一根金条,这根金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?
解答:切两刀,分成1/7,2/7,4/7三段
第一天给1/7;
第二天给2/7,并换回之前的1/7;
第三天给1/7;
第四天给4/7,并换回之前给的1/7和2/7;
第五天给1/7;
第六题给2/7,并换回之前给的1/7;
第七天给1/7.
毒药问题
问:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?
解答:首先一共有1000瓶,2的10次方是1024,刚还大于1000,也就是说1000瓶药品可以使用10位二进制数表示出来。
- 第一瓶 : 00 0000 0001
- 第二瓶 : 00 0000 0010
- 第三瓶 : 00 0000 0011
- ……
- 第999瓶: 11 1111 0010
- 第1000瓶:11 1111 0011
将10只老鼠按照顺序进行编号为ABCDEFGHIJ,代表着从低位到高位的每一个二进制位。
每只老鼠对应一个二进制位,如果该位的数字为1,则让老鼠喝瓶里的药。观察,若死亡的老鼠编号为:ACFGJ这5只老鼠,则对应的编号为10 0110 0101,有毒的药品就是该编号,转为十进制为:613号。
2. 先手必胜问题
轮流拿石子
题目链接:石子游戏
问:你和你的朋友面前有一排石头堆,用一个数组
piles
表示,piles[i]
表示第i
堆石子有多少个。你们轮流拿石头,一次拿一堆,但是只能拿走最左边或者最右边的石头堆。所有石头被拿完后,谁拥有的石头多,谁获胜。由你第一个开始拿,注意,石头的堆的数量为偶数,所以你们两人拿走的堆数一定是相同的。石头的总数为奇数,也就是你们最后不可能拥有相同多的石头,一定有胜负之分。
举个例子,
piles=[2, 1, 9, 5]
,你先拿,可以拿 2 或者 5,你选择 2。
piles=[1, 9, 5]
,轮到对手,可以拿 1 或 5,他选择 5。
piles=[1, 9]
轮到你拿,你拿 9。最后,你的对手只能拿 1 了。
这样下来,你总共拥有
2 + 9 = 11
颗石头,对手有5 + 1 = 6
颗石头,你是可以赢的,所以算法应该返回 true。你看到了,并不是简单的挑数字大的选,为什么第一次选择 2 而不是 5 呢?因为 5 后面是 9,你要是贪图一时的利益,就把 9 这堆石头暴露给对手了,那你就要输了。
解答:这个条件下,先下手必胜。
如果我们把这四堆石头按索引的奇偶分为两组,即第 1、3 堆和第 2、4 堆,那么这两组石头的数量一定不同,也就是说一堆多一堆少。因为石头的总数是奇数,不能被平分。
而作为第一个拿石头的人,你可以控制自己拿到所有偶数堆,或者所有的奇数堆。
你最开始可以选择第 1 堆或第 4 堆。如果你想要偶数堆,你就拿第 4 堆,这样留给对手的选择只有第 1、3 堆,他不管怎么拿,第 2 堆又会暴露出来,你就可以拿。同理,如果你想拿奇数堆,你就拿第 1 堆,留给对手的只有第 2、4 堆,他不管怎么拿,第 3 堆又给你暴露出来了。
也就是说,你可以在第一步就观察好,奇数堆的石头总数多,还是偶数堆的石头总数多,然后步步为营,就一切尽在掌控之中了。知道了这个漏洞,可以整一整不知情的同学了。
当然,「总共有偶数堆石子」和「石子总数为奇数」是先手必胜的前提条件。
抢30的必胜策略
问:抢30是双人游戏,游戏规则:第一个人喊1 或 2,第二个人要接着往下喊一个或两个数,然后再轮到第一个人。两个人轮流进行下去,问喊数字的最佳策略。
解答:尽量喊3的倍数。
倒着看,其实,喊到27时就决定胜负了。
假设A喊了27,B只能喊28或29,下个回合,A一定可以喊到30,也就是说,喊27者必胜。
再倒着看,喊24时就决定胜负了,假设A喊了24,B只能喊25或者26,下个回合A一定能喊27.
同理可以推出:喊3的倍数者必胜。
然后会发现,这个游戏谁先喊,谁一定输。
Nim游戏
这道题的思路跟抢30的必胜策略很相似,游戏规则是这样的:
问:你和你的朋友面前有一堆石子,你们轮流拿,一次至少拿一颗,最多拿三颗,谁拿走最后一颗石子谁获胜。
假设你们都很聪明,由你第一个开始拿,比如现在有 4 颗石子,无论你拿 1 颗 2 颗还是 3 颗,对方都能一次性拿完,拿走最后一颗石子,所以你一定会输。
解答:我们解决这种问题的思路一般都是反着思考。
如果我能赢,那么最后轮到我取石子的时候必须要剩下 1~3 颗石子,这样我才能一把拿完。
如何营造这样的一个局面呢?显然,如果对手拿的时候只剩 4 颗石子,那么无论他怎么拿,总会剩下 1~3 颗石子,我就能赢。
如何逼迫对手面对 4 颗石子呢?要想办法,让我选择的时候还有 5~7 颗石子,这样的话我就有把握让对方不得不面对 4 颗石子。
如何营造 5~7 颗石子的局面呢?让对手面对 8 颗石子,无论他怎么拿,都会给我剩下 5~7 颗,我就能赢。
这样一直循环下去,我们发现只要踩到 4 的倍数,就落入了圈套,永远逃不出 4 的倍数,而且一定会输。
所以本题要尽量避开4的倍数。
3. 水桶问题
5L和6L的水桶怎么量出3L的水?
问:在水资源无限的情况下,5L和6L的水桶怎么量出3L的水?
解答:
- 6L水桶装满水倒入5L水桶,余下1L水
- 5L水桶倒空,将6L水桶中剩余的1L水倒入5L水桶
- 6L水桶再次装满水倒入5L水桶,余下2L水
- 5L水桶倒空, 将6L水桶中剩余2L水倒入5L水桶
- 6L水桶再次装满水倒入5L水桶,余下3L水
3L和5L的水桶怎么量出4L的水?
问:在水资源无限的情况下,3L和5L的水桶怎么才能量取4L的水?
解答:
- 初识时0,5
- 然后3,2
- 然后0,2
- 然后2,5
- 然后1,4
一个装了10L水的桶,一个7L的空桶还有一个3L的空桶
问:一个装了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
舀酒问题
问:据说有人给酒肆的老板娘出了一个难题:此人明明知道店里只有两个舀酒的勺子,分别能舀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
4. 计时问题
漏斗计时
有一个能计时6分钟的小沙漏和一个能计时8分钟的大沙漏,如何计时10分钟?
解答:
- 两个沙漏同时倒置开始计时,等小沙漏漏完,大沙漏还剩2分钟,这时倒置小沙漏继续计时;
- 大沙漏漏完小沙漏还剩4分钟,再把大沙漏倒置继续计时;
- 小沙漏漏完大沙漏还剩4分钟,这时准备工作已经完毕;
- 等待大沙漏漏完(4分钟)+ 小沙漏(6分钟) = 10分钟。
烧绳子
问:烧一根绳子需要一个小时,现有两条相同的绳子,问如何计时15分钟?
解答:
- 点燃绳子A的一头,同时点燃绳子B的两头;
- 绳子B烧完的时候绳子A还剩一半,此时点燃绳子A的另一头开始计时;
- 15分钟绳子A烧完。
蜡烛燃烧
问:两根蜡烛,燃烧完都需要1小时,问我们怎么确定15分钟是多久?
解答:
跟上题一样:
- 点燃第一根的一端,第二根的两端。
- 第二根烧完代表半小时后,点燃第一根另一端,烧完代表15分钟。
5. 赛马问题
25匹马5条跑道找最快的3匹马
问:25匹马5条跑道找最快的3匹马,最少需要跑几次?
解答:最少需要跑7次。
- 将25匹马分成ABCDE5组,假设每组的排名就是A1>A2>A3>A4>A5, 这里比赛5次
- 第6次,每组的第一名进行比赛,可以找出最快的马,这里假设A1>B1>C1>D1>E1, D1,E1肯定进不了前3,直接排除掉
- 第7次,B1 C1 A2 B2 A3比赛,可以找出第二,第三名
64匹马8条跑道找最快的4匹马
问:64匹马8条跑道找最快的4匹马,最少需要跑几次?
解答:至少需要跑11次。
**第一步:**全部马分为8组,每组8匹,每组各跑一次,然后淘汰掉每组的后四名(需要比赛8场)
**第二步:**取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马,如下图(需要比赛1场)
这个时候总冠军已经诞生,它就是A1,蓝域(它不需要比赛了)。
而其他可能跑得最快的三匹马只可能是下图中的A2,A3,A4,B1,B2,B3,C1,C2,D1,共9匹马
**第三步:**只要从上面的9匹马中找出跑得最快的三匹马就可以了,但是现在只要8个跑道,怎么办? 那就随机选出8匹马进行一次比赛吧(需要比赛一场)
**第四步:**上面比赛完,选出了前三名,但是9匹马中还有一匹马没跑呢,它可能是一个潜力股啊,那就和前三名比一比吧,这四匹马比一场,选出前三名。最后加上总冠军,跑得最快的四匹马诞生了!!!(需要一场比赛)
最后,一共需要比赛的场次:8 + 1 + 1 + 1 = 11 场
6. 思维发散题:为什么井盖是圆的?
解答:
- 原因1:圆井盖更容易搬运。
我们知道,井盖在生产出来后,需要运输到相应的位置,而且由于井盖比较重,所以在搬运的时候,非常费力气。井盖做成圆形后,在平坦的地方就可以滚着走,并且在调整井盖位置的时候,圆形的东西,更加容易翻滚。所以把井盖做成圆形更加容易搬运。
- 原因2:圆井盖不易损坏,且节省材料
很多下水井都设置在马路上,井盖覆盖在下水井上面,通常要承受路面车辆和行人带来的压力。而汽车运行在公路上,压力非常大,井盖在设计以及用料上都要承受巨大的压力,才能保证安全。
当然井盖也有方的,从物理上的力学定律来看,圆形物体边缘受力均匀,比同等面积其它形状的物体更能承受压力,而且边缘不容易破损。所以我们现在看到圆形的井盖,其实有着很大的科学道理。
- 原因3:井盖设计成圆形,更能和下水道契合。
同时,下水道使用的都是圆形的管道。这种圆形管道,更有利于污水通过,为了契合下水道的形状,所以井盖也设计成圆形。圆形井盖能完美地契合下水道,这有利于节约成本,提高下水道的使用效率。这也是通过长期科学验证得到的正确做法。
- ……
|
|