共 35 道 趣味题 面试题。答案默认折叠,便于先自行作答。

1. 过桥问题

难度:2 · 类型:QA

在一个夜晚,同时有4人需要过一桥,一次最多只能通过两个人,且只有一只手电筒,而且每人的速度不同。A,B,C,D需要时间分别为:1,2,5,10分钟。问:在17分钟内这四个人怎么过桥?

题目要点

第一步:A、B过花时间2分钟。

参考答案

第一步:A、B过花时间2分钟。

第二步:B回花时间2分钟。

第三步:C、D过花时间10分钟。

第四步:A回花时间1分钟。

第五步:A、B再过花时间2分钟。

2. 圆环转圈问题

难度:2 · 类型:QA

两个圆环,半径分别是1和2,小圆在大圆内部绕大圆圆周一周,问小圆自身转了几周?如果在大圆的外部,小圆自身转几周呢?

题目要点

小圆所转动的路程便是小圆圆心走过的距离

参考答案

小圆所转动的路程便是小圆圆心走过的距离

所以在大圆外部转动,小圆圆心饶半径为3的大圆心转动,走了三圈

所以在大圆内部转动,小圆圆心饶半径为1的大圆心转动,走了一圈

3. 推理问题(二)

难度:1 · 类型:QA

赵女士买了一些水果和小食品准备去看望一个朋友,谁知,这些水果和小食品被他的儿子们偷吃了,但她不知道是哪个儿子。为此,赵女士非常生气,就盘问4个儿子谁偷吃了水果和小食品。老大说道:“是老二吃的。”老二说道:“是老四偷吃的。”老三说道:“反正我没有偷吃。”老四说道:“老二在说谎。”这4个儿子中只有一个人说了实话,其他的3个都在撒谎。那么,到底是谁偷吃了这些水果和小食品?

题目要点

是老三偷吃了水果和小食品,只有老四说了实话。

参考答案

是老三偷吃了水果和小食品,只有老四说了实话。

用假设法分别假设老大、老二、老三、老四都说了实话,看是否与题意矛盾,就可以得出答案。

4. 最后剩下谁?

难度:2 · 类型:QA

1~50 号运动员按顺序排成一排。教练下令:“单数运动员出列!”剩下的运动员重新排队编号。教练又下令:“单数运动员出列!”如此下去,最后只剩下一个人,他是几号运动员?如果教练下的令是“双数运动员出列!”最后剩下的又是谁?

题目要点

教练下令“单数”运动员出列时,教练只要下5次命令,就能知道剩下的那个人。

参考答案

教练下令“单数”运动员出列时,教练只要下5次命令,就能知道剩下的那个人。

此人在下第五次令之前排序为2,在下4次令之前排序为4,在下3次令之前排序为8,在下2次令之前排序为16,在下1次令之前排序为32,即32位运动员,因此答案是32号。

如果教练下的令是“双数运动员出列!”,最后剩下的是1号。

5. 推理问题(一)

难度:1.5 · 类型:QA

甲、乙、丙三个人在一起做作业,有一道数学题比较难,当他们三个人都把自己的解法说出来以后:

  • 甲说:“我做错了。”
  • 乙说:“甲做对了。”
  • 丙说:“我做错了。”

在一旁的丁看到他们的答案并听了她们的意见后说:“你们三个人中有一个人做对了,有一个人说对了。”

请问,他们三人中到底谁做对了?

题目要点

假设丙做对了,那么甲、乙都做错了,这样,甲说的是正确的,乙、丙都说错了,符合条件,因此,丙做对了。

参考答案

假设丙做对了,那么甲、乙都做错了,这样,甲说的是正确的,乙、丙都说错了,符合条件,因此,丙做对了。

6. 问路问题

难度:3 · 类型:QA

  • 有甲、乙两人,其中,甲只说假话,而不说真话;乙则是只说真话,不说假话。

但是,他们两个人在回答别人的问题时,只通过点头与摇头来表示,不讲话。

有一天,一个人面对两条路:A与B,其中一条路是通向京城的,而另一条路是通向一个小村庄的。

这时,他面前站着甲与乙两人,但他不知道此人是甲还是乙,也不知道“点头”是表示“是”还是表示“否”。

现在,他必须问一个问题,才可能断定出哪条路通向京城。那么,这个问题应该怎样问?

题目要点

答题思路

本题的关键在于设计一个问题,使得无论是甲(总说假话)还是乙(总说真话),无论是“点头”代表“是”还是“摇头”代表“是”,提问者都能根据他们的回答(点头或摇头)判断出哪条路通向京城。

  1. 理解人物特性:甲只说假话,乙只说真话。
  2. 考虑非语言沟通的不确定性:“点头”和“摇头”在这里可以代表“是”或“否”,但具体对应关系未知。
  3. 设计通用问题:需要构造一个问题,其答案无论是真是假,都能直接指向正确的道路。由于甲总说假话,乙总说真话,我们需要一个能让他们给出相反答案(一个指向京城,一个指向小村庄)的问题。
  4. 利用反证法:可以问一个关于对方会如何指示的问题,比如“如果我问你的同伴哪条路通向京城,他会指哪条路?”。
    • 甲(说假话)会指向小村庄,因为他知道乙会指向京城,但他会说假话。
    • 乙(说真话)会真实地告诉提问者甲会指向小村庄。

考察点

  • 逻辑推理能力:如何通过设计一个问题来间接获取正确答案。
  • 假设检验能力:在不确定“点头”和“摇头”具体含义的情况下,如何通过提问来验证并得出结论。
  • 反向思维能力:利用对方(甲)的欺骗性来反推真实情况。
参考答案

这个人只要站在A与B任何一条路上,然后对着其中的一个人问:“如果我问他(甲、乙中的另外一个人)这条路通不通向京城,他会怎么回答?”

如果甲与乙两个人都摇头的话,就往这条路向前走去,如果都点头,就往另一外一条走去。

解析

首先,把甲乙两人转换成X、Y,通向京城的路是A,通往乡村的路是B。

  • 假设X是说真话的人,那么Y就是说假话的人。

如果我问A(通往京城)通不通向京城,X(真话)的反应一定是摇头;因为他只说真话;同理,Y(假话)的反应也是摇头,因为他只说假话;所以,两人同时摇头,则代表是正确的道路;

如果我问B(通往乡村)通不通向京城,X(真话)的反应一定是点头,因为他判定Y(假话)会说谎,会有点头的反应;Y(假话)的反应也一定是点头,因为他只说假话。所以,两人同时点头,就代表是错误的道路,直接选择另外一条就可以了。

  • 假设X是说假话的人,那么Y就是说真话的人。

如果我问A(通往京城)通不通向京城,X(假话)的反应一定是摇头;因为他只说假话;同理,Y(真话)的反应也是摇头,因为他只说真话,并且断定X(假话)一定会说谎,做出摇头的反应。所以,两人同时摇头,则代表是正确的道路。

如果我问B(通往乡村)通不通向京城,X(假话)的反应一定是点头,因为他只说假话,会有点头的反应;Y(真话)的反应也一定是点头,因为他断定X(假话)一定会说谎,做出点头的反应。所以,两人同时点头,则代表错误的道路。

综上所述:如果甲与乙两个人都摇头的话,就往这条路向前走去,如果都点头,就往另一外一条走去。

7. 囚犯抓绿豆问题

难度:3 · 类型:QA

五个囚犯先后从100颗绿豆中抓绿豆。抓得最多和最少的人将被处死,不能交流,可以摸出剩下绿豆的数量,谁的存活几率最大?

提示:

  • 1、他们都是很聪明的人;
  • 2、他们的原则是先求保命,再去多杀人;
  • 3、100颗不必都分完,但要保证每人至少抓一颗;
  • 4、若有重复的情况,则也算最大和最小,一并处死。

题目要点

答题思路

这个问题考察的是博弈论中的策略思维和逻辑推理。

  1. 首个囚犯的策略:作为第一个,他会选择一个既不太多也不太少的绿豆数,比如总数的五分之一左右但稍减(如17),以留给后续囚犯调整空间。

  2. 后续囚犯的反应:后续囚犯会根据剩余绿豆数尽量平均分配,避免成为最多或最少。如果可能,会倾向于选择使总数达到某个安全倍数(如5的倍数),以减少风险。

  3. 均衡与存活:在所有人足够聪明的情况下,会形成一个相对均衡的分配,每个人的数量都相近但略有差异,从而最大化各自的存活机会。

考察点

  • 博弈论策略:在不确定性和有限信息下做出最优选择。
  • 逻辑推理:通过问题条件分析来制定策略。
  • 生存概率最大化:在规则限制下寻找最佳生存策略。
参考答案

题目分析

(1)分别按1-5号在装有100颗绿豆的麻袋抓绿豆

每个囚犯被编号为1,2,3,4,5,按照顺序依次从麻袋里面抓绿豆,也就是依次只有一个人在麻袋中抓绿豆。否则,他们就有可能交流,甚至可能出现无法摸出剩下豆子数的可能。

(2)每人至少抓一颗

直接说明就是,5个人从95颗豆子中随意选择。(此处写95是为了后面的逻辑推理)

(3)他们都是聪明人

说白了就是知道怎么才能使自己活下来的可能性最大,只要有希望就会去争取(马云说过,希望还是要有的,万一实现了)。

(4)他们的原则是先求保命,再去多杀人

也就是只要能在活下来的前提下,能杀死几个就杀死几个(哈哈,穷凶极恶啊)

(5)提示中的“若有重复的情况,则也算最大或最小,一并处死”

结合题目,处死条件为:抓取豆子数最多者、最少者、重复者

(6)问他们中谁的存活几率最大?

从这个问题剖析,可以了解到:没有绝对的生还者,每个人的生死都相互关联,是个概率问题

分析

第一个人选择17时最优的。它有先动优势。他确实有可能被逼死,后面的2、3、4号也想把1号逼死,但做不到(起码确定性逼死做不到)

可以看一下,如果第1个人选择21,他的信息时暴露给第2个人的,那么,1号就将自己暴露在一个非常不利的环境下,2-4号就会选择20,五号就会被迫在1-19中选择,则1、5号处死。所以1号不会这样做,会选择一个更小的数。

1号选择一个<20的数后,2号没有动力选择一个偏离很大的数(因为这个游戏偏离大会死),只会选择+1或-1,取决于那个死的概率小一些,再考虑这些的时候,又必须逆向考虑,1号必须考虑2-4号的选择,2号必须考虑3、4号的选择,… …只有5号没得选择,因为前面是只有连着的两个数(且表示为N,N+1),所以5号必死,他也非常明白这一点,会随机选择一个数,来决定整个游戏的命运,但决定不了他自己的命运。

下面决定的就是1号会选择一个什么数,他仍然不会选择一个太大或太小的数,因为那样仍然是自己处于不利的地位(2-4号肯定不会留情面的),100/6=16.7(为什么除以6?因为5号会随机选择一个数,对1号来说要尽可能的靠近中央,2-4好也是如此,而且正因为2-4号如此,1号才如此… …),最终必然是在16、17种选择的问题。

对16、17进行概率的计算之后,就得出了3个人选择17,第四个人选择16时,为均衡的状态,第4号虽然选择16不及前三个人选择17生存的机会大,但是若选择17则整个游戏的人必死(包括他自己)!第3号没有动力选择16,因为计算概率可知生存机会不如17。

所以选择为17、17、17、16、X(1-33随机),1-3号生存机会最大。

8. 连续自然数之和为1000的共有几组?(m,n都为自然数,单独1个数也算作“连续自然数”)

难度:2.5 · 类型:QA

题目要点

答题思路

  1. 理解题意:首先明确题目要求找出所有连续自然数之和为1000的组合数量,其中m和n为自然数,且单独一个数也视为连续自然数。

  2. 应用等差数列求和公式:对于任意连续自然数序列,可以将其视为等差数列,首项为a,公差为1,项数为n。

  3. 遍历或数学推导

    • 单独一个数的情况:直接检查哪些自然数等于1000(显然只有1000本身)。
    • 两个连续自然数:设首项为a,则 $a + (a+1) = 1000$,解这个方程找到可能的a值。
    • 三个及以上连续自然数:由于项数n和首项a都是未知数,可以通过遍历或数学推导来找到所有可能的组合。但更有效的方法是利用等差数列求和公式,结合二分查找或数学推导来减少计算量。
  4. 计数:对于找到的每一组满足条件的连续自然数,进行计数。

  5. 总结答案:将单独一个数、两个连续自然数、三个及以上连续自然数的所有可能组合数相加,得到最终答案。

考察点

  • 等差数列求和公式的应用。
  • 代数方程的求解能力。
  • 逻辑推理和数学推导能力。
  • 遍历和计数技巧。
  • 对自然数、连续自然数等数学概念的理解。
参考答案

解析和答案

9. 猴子搬香蕉问题

难度:2.5 · 类型:QA

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

题目要点

答题思路

  1. 理解问题

    • 首先,明确问题的所有条件和限制:猴子有100根香蕉,需要走过50米到家,每次最多搬50根,每走1米吃掉1根。
    • 确定目标:最大化猴子搬回家的香蕉数量。
  2. 策略分析

    • 考虑到猴子每次搬运都会消耗体力(即走的路程)和香蕉,因此需要制定一个策略来平衡这两者的关系。
    • 显然,直接搬运50根到50米处并不可行,因为到那时香蕉会全部被吃掉。
    • 引入“中间点”的概念:猴子可以先搬运一部分到某个中间点,然后返回取剩下的部分,最后再一起搬运回家。
  3. 数学建模

    • 设中间点为X米处(0 < X < 50)。
    • 第一次搬运:猴子搬运50根到X米处,吃掉X根,剩下50-X根在X米处。
    • 返回:猴子返回出发点,吃掉X根,此时还剩下100-2X根香蕉可以搬运。
    • 第二次搬运:猴子搬运剩下的100-2X根中的50根(或更少,如果100-2X小于50)到X米处,与第一次留下的香蕉合并,并在此过程中吃掉X根。
    • 回家:猴子带着合并后的香蕉(不超过50根)继续走到家,吃掉剩余的路程(50-X米)对应的香蕉数。
参考答案

把问题简化成走最短的路,背更多的水果。但路和水果之间有限制。

题目已经限制,猴子最多背50,我们计算其消耗仅剩下50根的米处。

假设猴子第一次背了50根,走了X米,在回来搬第2个50根,就有:

  • 100-3X —— 剩下的香蕉数(先走X,往反2X)
  • 50-X —— 剩下的米处

问题就明白了:

  • (100-3X)-(50-X)=50-2X —— 回到家时的香蕉数

问题就简化为在条件: (100-3X)<=50的情况下,求(50-2X)的最大值。

得到: X=17时, 50-2X 的最大值是 16

所以是16根

10. 修改水果框标签问题

难度:2 · 类型:QA

有三框水果,有一筐全是苹果,一筐全是橘子,还有一筐是两种水果的混合。

三框都分别标记了“苹果”“橘子”“混合”,但是标签全是错的,即标签是什么里面就一定不是那框水果。

你的任务是如何只把手伸进一个框子中,只拿出一个水果,然后准确的把三框水果的标签改正确。

题目要点

把手伸进标记为混合的框子里。因为都是错的,所以标记为混合的框里肯定装的只是一种水果,那么拿出是什么水果,就是应该标记什么水果。

参考答案

把手伸进标记为混合的框子里。因为都是错的,所以标记为混合的框里肯定装的只是一种水果,那么拿出是什么水果,就是应该标记什么水果。

之后剩下两个框子,你已经确认的框中是什么水果,那么对应的标记框子内的水果是混合的,剩下一个就是另一种水果的。

11. 盲人分袜子

难度:2 · 类型:QA

有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜子都有一张商标纸连着。两位盲人不小心将八对袜子混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?

题目要点

每拿一对袜子,就把袜子拆开,一人一只。到最后肯定是两个人都平均分到了黑袜子和白袜子。

参考答案

每拿一对袜子,就把袜子拆开,一人一只。到最后肯定是两个人都平均分到了黑袜子和白袜子。

12. 拿苹果问题

难度:3 · 类型:QA

桌上有100个苹果,你和另一个人一起拿,一人一次,每次拿的数量大于等于1小于等于5,问:如何拿能保证最后一个苹果由你来拿?

题目要点

分析:如果要保证拿最后一个,那么就得保证拿到第94个,以此类推,要拿第94个,就要保证拿到第88个、82、76、70…最后只要保证你拿到第四个就行了。

参考答案

分析:如果要保证拿最后一个,那么就得保证拿到第94个,以此类推,要拿第94个,就要保证拿到第88个、82、76、70…最后只要保证你拿到第四个就行了。

答案:只需要你先拿,第一次拿4个,以后看对方拿的个数,根据对方拿的个数,保证每轮对方和你拿的加起来是6就行了,其实就是保证你拿到4,还要拿到10,16…直到94

13. 握手问题

难度:3.5 · 类型:QA

有5对夫妇举行家庭聚会。每一个人都可能和其他人握手,但夫妇之间绝对不握手。

聚会结束时,A先生问大家握手几次,结果是每个人的握手次数都不相同,那么请问A先生的太太握手几次?

题目要点

答题思路

  1. 理解题意:5对夫妇共10人,每人不与配偶握手,握手次数各不相同。

  2. 确定握手次数范围:从0到9,因为最多与9人握手,最少0次(无人与之握手)。

  3. 利用独特性:由于每个人的握手次数都不同,且数字从0到9连续,可视为一个排列问题。

  4. 配对分析:每对夫妇中,一人的握手次数多则另一人少,因此他们的握手次数在数字序列中是相邻的或间隔的。

  5. 确定A先生太太的次数

    • 假设A先生握手次数非极端(非0或9),则他的太太次数将是除了A先生次数、0、以及因连续性而被占用的另一数字外的那个数。
    • 由于没有给出A先生的具体次数,我们只需知道A太太的次数是唯一的,且符合上述条件。

考察点

  • 逻辑推理与数字排列。
  • 理解并应用题目中的限制条件(如夫妇不握手,次数各不相同)。
  • 问题建模能力,即将实际问题转化为数学问题求解。
参考答案

A先生的太太握了4次手。

首先,分析题目:每一个人都可能和其他人握手, 但夫妇之间绝对不握手

可得出每个人最多握八次手(除自己和亲爱的)

甲先生问各握了几次手时得到的回答是:

0,1,2,3,4,5,6,7,8

解析如下:

  • 回答握了8次的说明TA除了自己亲爱的以外,和每个人都握手了。所以TA和回答握手次数为0的那个人是一家人。

  • 因为8君和除了0君外的人都握手了,所以1君的那一次握手肯定是和8君。7君握了七次手,没和0君、1君握,因为每人最多握8次手且0君是8君的爱人,则可得出7君和1君是一家人。

  • 因为8君和除了0君外的人都握手了,7君和除0君、1君外的人都握手了,所以2君的两次握手应该分别是和7君、8君。6君握了6次手,没和0君、1君、2君握手,因为每人最多握8次手且0君是8君的爱人、1君是7君的爱人,所以2君和6君是一家人。

  • 因为8君和除了0君外的人都握手了,7君和除0君、1君外的人都握手了,6君和除0君、1君、2君外的人都握手了,所以3君的三次握手应该分别是和6君、7君、8君握的。5君握了5次手,没和0君、1君、2君、3君握,因为每人最多握8次手且0君是8君的爱人、1君是7君的爱人、2君是6君的爱人,所以3君和5君是一家人。

  • 由上可得,4君即为甲太太,也就是说甲太太握了4次手.

那甲太太分别是和谁握的呢?

当然是5、6、7、8君啦~

14. 盲人翻牌

难度:2.5 · 类型:QA

给一个盲人52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?

题目要点

把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌全部翻过来。

参考答案

把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌全部翻过来。

解析:设42张中有x张正面朝上,则10张里面有10-x张正面朝上,这时将10张全部翻过来,两堆牌里都有x张正面朝上

15. 一百个囚犯和一盏灯

难度:3.5 · 类型:QA

国王招来100个囚犯,对他们说:你们犯的是死罪,但我给你们一次求生的机会。15分钟以后,你们将被关进一个有100间隔离牢房的监狱里,每人一间牢房,都与外界隔绝,什么也听不见看不到,连时间都没法计算,无法获得外界的任何信息。

这所监狱有一个院子,每天只少随机(注意是完全随机)打开一间牢房的门,让一个囚犯到院子里来放风。院子里有一盏灯,放风的囚犯可以控制它的开关,将它打开或是关闭。除囚犯之外,其他人都不会去碰开关。这盏灯会永远有充足的能源供应,灯泡和电路不会出故障。

除了开关这盏灯,放风的囚犯放风时留下的任何其它痕迹都会在夜晚被清除干净(包括在灯上作的任何记号)。牢房是完全封闭的,院子里的灯光在牢房里看不到。只有放风到院子里的人才能看到。

国王:好了现在我向你们提出一个要求,只要你们做到了,就可以全部获得释放:

给你们15分钟商量你们的方案。15分钟以后,你们将被关进我刚才说的那个监狱,永远无法再交流,被关若干天后,你们中间如果任何一个人能够向我证明你们每个人都至少放风了一次,我就把你们放了,不然永远别想再出来。

如果你们有谁现在可以告诉我这个方法,也就是能够证明你们每人至少放风一次的方法,我就放掉你们!

其中一个囚犯想了几分钟,回答了这个问题,国王听后,如自己所说的把他们全部给放了。请问那个囚犯是用什么方法证明的?

题目要点

100个囚犯商量选出一个囚犯作为计数员,普通囚犯每次出去,如果自己没有打开过灯,并且灯是灭的,则打开灯;其它情况均不操作。计数员每次出去,如果灯是亮的就自己计数一次,并把灯关掉,其它情况什么也不干。一直到计数员计数到100,则全部囚犯都出去过至少打过一次灯。

参考答案

100个囚犯商量选出一个囚犯作为计数员,普通囚犯每次出去,如果自己没有打开过灯,并且灯是灭的,则打开灯;其它情况均不操作。计数员每次出去,如果灯是亮的就自己计数一次,并把灯关掉,其它情况什么也不干。一直到计数员计数到100,则全部囚犯都出去过至少打过一次灯。

再来细化化下每个角色的职责:

  • 计数员: 如果灯亮,计数一次,并关灯。如果灯灭,啥事不干。
  • 普通囚犯:如果自己没有开关灯,并且现在灯灭,就打开灯;如果自己以前开过灯或现在灯亮,则什么也不做。
  • 灯:能开、能关

16. 64匹马,8个赛道,找出最快的4匹马,要比赛多少轮?

难度:3.5 · 类型:QA

题目要点

首先把64匹马分成8组,跑8次。每一组都会得到8匹的相对速度,也就是在同一组内的名次。

参考答案

首先把64匹马分成8组,跑8次。每一组都会得到8匹的相对速度,也就是在同一组内的名次。

image.png

为了方便描述,我们用编号来表示。如A组里面的名次分别用来表示。

image.png

因为我们只需要找出最快的4匹,那么肯定不属于最快的4匹,同理把每一组的后4名先排除。

image.png

现在每一组内都有相对名次,但不同的组间是不知道的。如果把A组和B组放一起,下面的情况都可能存在。

image.png

因为是要找最快的,所以选择每组的第一名再出来跑一次,这样落后的第一名所在的整组都可以排除。为了描述方便,把最快到最慢的第一名所在的组依次重新命名为A,B…H组。

image.png

组间的第一名有了名次关系,可以发现一定不属于前4名,因为都在他们前面。同理可排除。同时是最快的,一定属于前4。那接下来只需在剩下的9匹中找出前3。

image.png

除去A3,其余8匹跑一次。如果A2在第3名或者更后,那说明已经选出了前3名,也不用再跑了,否则再取前3和A3一起跑一次,即可得结果。

image.png

最多11次一定可以选出最快的4匹。

17. 如何使用js计算一个html页面有多少种标签?

难度:3 · 类型:QA

题目要点

这道题看似简单,但是是一个很有价值的一道题目。它包含了很多重要的知识:

参考答案

分析

这道题看似简单,但是是一个很有价值的一道题目。它包含了很多重要的知识:

  • 如何获取所有DOM节点
  • 伪数组如何转为数组
  • 去重

解答

  • 获取所有的DOM节点。
document.querySelectorAll('*')

此时得到的是一个NodeList集合,我们需要将其转化为数组,然后对其筛选。

  • 转化为数组
[...document.querySelectorAll('*')]

一个拓展运算符就轻松搞定。

  • 获取数组每个元素的标签名
[...document.querySelectorAll('*')].map(ele => ele.tagName)

使用一个map方法,将我们需要的结果映射到一个新数组。

  • 去重
new Set([...document.querySelectorAll('*')].map(ele=> ele.tagName)).size

我们使用ES6中的Set对象,把数组作为构造函数的参数,就实现了去重,再使用Set对象的size方法就可以得到有多少种HTML元素了。

18. 砝码称重问题(三)

难度:1 · 类型:QA

现在有质量分别为1g、2g、3g、4g、8g的砝码各一枚.用这些砝码在天平上共可称出多少种不同的质量?

题目要点

1g-18g都可以称出来,也就是18种

参考答案

1g-18g都可以称出来,也就是18种

1=1
2=2
3=3
4=4
5=1+4
6=2+4
7=3+7
8=8
9=1+8
10=2+8
11=3+8
12=4+8
13=1+4+8
14=2+4+8
15=3+4+8
16=1+3+4+8
17=2+3+4+8
18+1+2+3+4+8

19. 砝码称重问题(二)

难度:3 · 类型:QA

假设有280g食盐,有一架天平,有两个砝码,分别是14g、4g。

请问能否在3次内将280g食盐分为100g和180g两堆,请详细描述你的解决方法。

题目要点

第一次:平分280g的食盐:140g、140g

参考答案

解法一

  • 第一次:平分280g的食盐:140g、140g

目前重物:食盐:140g、140g,砝码:4g、14g

  • 第二次:平分140g的食盐:70g、70g

目前重物:食盐:70g、70g、140g,砝码:4g、14g

我们再需要称出30g的食盐

如何根据上面的重物利用天平称出30g的食盐

称了两次两个砝码还都没有用,同时14-4=10,所有两个砝码分布放在天平的两侧

  • 第三次:天平左侧:4g砝码 + 40g食盐,天平右侧:14g砝码+ 30g食盐

目前重物:食盐:30g、40g、70g、140g,砝码:4g、14g

食盐重量可组合成100g、180g

解法二

  • 第一次:4g砝码+280g食盐+天平,可以分成食盐:142g、138g

目前重物:食盐:138g、142g,砝码:4g、14g

  • 第二次:14g砝码+142g食盐+天平,称出食盐14g

目前重物:食盐:14g、128g、138g,砝码:4g、14g

  • 第三次:天平左侧:14g食盐+14g砝码 ,天平右侧:28g食盐

目前重物:食盐:14g、28g、100g、138g,砝码:4g、14g

食盐重量可组合成100g、180g

解法三

  • 第一次:用14克砝码得出14克盐。

目前重物:食盐:14g、266g

  • 第二次:用14克砝码和4克砝码把266克盐分为128克盐和138克盐。

目前重物:食盐:14g、28g、138g、266g

  • 第三次:14克砝码和14克盐从128克盐中得到28克盐,剩下100克盐。

得到180克和100克两堆食盐.

20. 砝码称重问题(一)

难度:4 · 类型:QA

如何制造个数最少的单位砝码,如 1g,2g,3g,4g……,使得这些单位砝码能称出1g到100g之间的任何整数克的物体?

题目要点

最直观的感受是直接使用1,2,4,8……,64 。也就是2^0,2^1,2^2……2^6,一共7个砝码,因为任何数字都可以表示成二进制数,比如100用二进制表示就是:1100100,所以使用2^2,2^5,2^6三个砝码即可。任何数字都可以表示为二进制数,在这里就意味着任何重量都可以用上述2^n砝码表示。

参考答案

最直观的感受是直接使用1,2,4,8……,64 。也就是2^0,2^1,2^2……2^6,一共7个砝码,因为任何数字都可以表示成二进制数,比如100用二进制表示就是:1100100,所以使用2^2,2^5,2^6三个砝码即可。任何数字都可以表示为二进制数,在这里就意味着任何重量都可以用上述2^n砝码表示。

但这是最少数量的砝码吗?

这要视情况而定,如果只能在天平的一边放砝码,另一边放物品,这就是最少的方案。因为对于砝码而言只有两种状态:放与不放,对于n个砝码,可能出现的总体状态有2^n种状态,要表示100个数据则要保证2^n>=100,得最小的n=7,意思就是说不管什么砝码方案,至少都要7个砝码。而前面我们猜想的方案正好是7个砝码,正好是理论推导出的最少砝码个数,不会比这个数目更少了,所以是一个最少的方案。

如果允许天平两边都放砝码,也就是说物品可以和砝码放在一边,上述2^n砝码方案就不是最少的方案了。

因为砝码有三种状态:不放、放左边和放右边。

对于n个砝码,可能出现的总体状态有3^n种状态,要表示100个数据则要保证3^n>=100,的最小的n=5,意思就是说不管什么砝码方案,至少都要5个砝码。

接下来我们尝试一下能不能找到5个砝码的方案。

任意一个数都可以表示成三进制的数,比如100用三进制表示就是10201,通过减法,我们又可以把任意一个三进制数化成只有0和1的形式,比如将10201化成10201=11001-100。而且减数与被减数相同位上的数字必然不会同时为1,假如化成减法形式后相同位同时为1,比如110-10,两个数的十位上都为1,结果必然是100,没有2,所以不用化简,矛盾。

综上,3^0,3^1,3^2……3^4一共5个砝码一定可以表示出从1到3^0+3^1+3^2+…+3^4=121的所有数(注:不是3^5-1)

21. 绳子计时问题

难度:3 · 类型:QA

有若干根相同的不均匀的绳子,烧完一根绳子的时间是1小时,问如何计时1小时15分钟?

题目要点

把第一根绳子两头同时点燃,同时把第二根绳子点燃一头。

参考答案

把第一根绳子两头同时点燃,同时把第二根绳子点燃一头。

当第一根绳子烧完时,时间为半个小时。

这时把第二根绳子的另一头也点燃,开始计时,当第二根绳子烧完时,停止计时,那么这段时间就是15分钟。

也就是说,只需要3根绳子就可以计时一个小时15分钟。

22. 高楼逃生问题

难度:2 · 类型:QA

如果你被困在一幢200米高的大楼的楼顶,手里有一根150米长的绳子和一把瑞士军刀。你所站的地方有一个铁钩子。往楼下看时,你发现大楼正中间,也就是100米高的位置上,有一个可以落脚的金属支架,上面还有另外一个钩子,问用现在的工具如何安全到达地面?

题目要点

把绳子割成50米和100米两段。把50米绳子的一端拴在楼顶的钩子上,另一端打一个小环。让100米长的绳子穿过这个环,再把它的两头系在一起形成一个绳圈。沿着绳子爬到落脚点,把100米长的绳子抽出收回来,然后把其中一端拴在钩子上,沿着绳子爬到地面。

参考答案

把绳子割成50米和100米两段。把50米绳子的一端拴在楼顶的钩子上,另一端打一个小环。让100米长的绳子穿过这个环,再把它的两头系在一起形成一个绳圈。沿着绳子爬到落脚点,把100米长的绳子抽出收回来,然后把其中一端拴在钩子上,沿着绳子爬到地面。

23. 计算聚会人数

难度:1 · 类型:QA

一次朋友聚会,大家见面时总共握手45次。如果参加聚会的人和其余的每个人只握手一次,问参加聚会的共有多少人?

题目要点

很简单的排列组合问题,答案 10人

参考答案

很简单的排列组合问题,答案 10人

24. 药丸难题

难度:2 · 类型:QA

医生给了病人两种药丸,每种两颗,两种药丸的成分不同,但外观一样,医生要求早上和晚上,每种药各吃一颗。现在药丸被混在了一起,难以分辨。如果病人没按照规定吃药或者不吃药,就会死亡。请问他要怎么做才能活下来?

题目要点

把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半。

参考答案

把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半。

25. 沙漠尸体

难度:1 · 类型:QA

一个人被发现死在沙漠里,手中捏着一根火柴,周围没有任何足迹,也没有其他线索。他是怎么死的呢?

题目要点

男子是从飞机上坠落死亡的。

参考答案

男子是从飞机上坠落死亡的。

可能是因为机械故障之类的原因,有部分乘客必须离开飞机,于是大家用火柴来抽签,而男子的运气不好,只能跳出飞机。

26. 球的重量

难度:3 · 类型:QA

有8个球,其中1个比另外的要略重。在不用砝码的前提下,你最少要称几次,才能找出这个球?

题目要点

最少称两次

参考答案

最少称两次

把所有的球分成三组,其中两组每组3个球,另一组2个球;首先,将3个球的两组进行称重,

  • 如果其中一组比较重,从这组球当中任选两个,再次称重
    • 如果轻重不等,重的球就是你要找的。
    • 如果轻重相等,剩下那个球就是你要找的。
  • 如果第一次称重时两组球一样重,那么就把剩下一组的两个球进行称重,就能得到答案

27. 干脆面抽卡问题

难度:3 · 类型:QA

假设小浣熊随机赠送的卡片共有 108 种(出现概率相同),那么集齐所有卡片所需购买小浣熊包数的数学期望是多少?

题目要点

明确几个性质:

参考答案

明确几个性质:

  1. 假设硬币丢正面的概率为p,那么第一次丢到正面的平均次数为1/p
  2. 抽到全部k张卡片所需要的次数= 抽到第一张所需要的次数+抽到第二张所需要的次数+…+ 抽到第k张所需要的次数。

显然,根据2和随机变量期望的线性叠加,我们有:

答案 = E(抽到全部k张卡片所需要的次数) = E(抽到第一张所需要的次数)+E(抽到第二张所需要的次数)+…+ E(抽到第k张所需要的次数)

假设一共有有n张卡片需要抽到,那么抽到第一张的概率为(抽到任何一张都属于被抽到的第一张)p = n/n = 1

根据 1) ,我们有:

E(抽到第一张所需要的次数) = 1/p = 1

那么抽到第二张的概率为(只要不重复抽到第一张,就属于抽到第二张):

p = (n-1)/n

根据1),我们有:

E(抽到第二张所需要的次数) = 1/p = n/(n-1)

那么抽到第三张的概率为(只要不重复抽到前两张,就属于抽到第三张):

p = (n-2)/n 根据1),我们有E(抽到第三张所需要的次数) = 1/p = n/(n-2)

以此类推,答案 = E(抽到全部k张卡片所需要的次数) = 1 + n/(n-1) + n/(n-2) + … + n/(n-k+1)n = 108的时候,原题问的是 k = 108,带入即可得到答案。

答案是519

28. 海盗博弈问题

难度:3 · 类型:QA

有五个理性的海盗(不妨以 A-E 命名)找到了100个金币,需要想办法分配金币。

而他们的分配原则是:海盗们从 A 到 E 依次提出一种分配方案。所有还活着的海盗投票决定是否接受这个提案,包括提议人。必须要多于半数的人投赞成票,提案才通过,此时按照提议分配金币。如果没有通过,那么提议人将被扔出船外,由下一个海盗提出新的分配方案。

现在假设海盗们都极其聪明,他们的首要目标是存活并且尽可能获得更多的金币。在此基础之上,他们也倾向于杀死更多的人。请问他们的最终结果是怎样的呢?

题目要点

对于 E 来说,此时不管 D 提出什么提案,他只需要反对即可,这样能够独吞财产并且杀死 D。而对于 D 来说,他只能选择死亡。所以这种情况下,双方结局:

参考答案

情形 1. 只剩 D、E

对于 E 来说,此时不管 D 提出什么提案,他只需要反对即可,这样能够独吞财产并且杀死 D。而对于 D 来说,他只能选择死亡。所以这种情况下,双方结局:

  • D:死亡。支持票。
  • E:获得 100 金币,杀死 1 人。反对票。

情形 2. 只剩 C、D、E

对于 D 来说,不管 C 提出什么提案,他都会赞成,因为如果 C 的提案不通过,那么就会来到上一个情况。那么对于 C 来说,有了 D 的支持,他就可以肆意妄为了。结局:

  • C:100 金币。支持票。
  • D:0 金币。支持票。
  • E:0 金币。反对票。

情形 3. 剩下 B、C、D、E

对于 C 来说,B 死了就能进入情形 2,所以他打死也不会赞成 B。对于 D、E,如果他们还是被分配 0 金币,那么他们会选择反对 B 来多杀一个人。但是他们只要得到 1 个金币,就会赞成 B。结局:

  • B:98 金币。支持票。
  • C:0 金币。反对票。
  • D:1 金币。支持票。
  • E:1 金币。支持票。

情形 4. A、B、C、D、E 全部都在

对于 A 来说,他需要拉拢至少 2 个其他人。那么拉拢成本最低的显然是 C,只需要给他 1 个金币,就会得到支持票。而对于 D、E,每个人都需要 2 个金币获得支持票。结局:

  • A:97 金币。支持票。
  • B:0 金币。反对票。
  • C:1 金币。支持票。
  • D:2 金币。支持票。
  • E:0 金币。反对票。( D 和 E 的结局可以互换,看 A 心情。)

最终结局:

(A,B,C,D,E)== (97,0,1,2,0)or(97,0,1,0,2)

29. 白帽子问题

难度:4 · 类型:QA

在一个房间里有100个学生。每个人头上都戴了一顶帽子,帽子的颜色是白色或者黑色。每个学生都只能看见别人的帽子的颜色,而不能看到自己帽子的颜色。

老师对所有人说:“你们每个人要么戴白帽子,要么戴黑帽子,并且有人戴白帽子,请戴白帽子的同学举手。” 如果没人举手,老师一分钟后再问:“请戴白帽子的同学举手。” 然后老师每个一分钟后重复同样的问题,直到所有戴白帽子的学生都举手为止。

假设每个学生都极其聪明,100个学生中只有5个人戴了白帽子。请问,什么时候戴白帽子的学生会全部举手?

题目要点

这个问题是一个经典的逻辑推理问题,涉及到推理和知识共享的概念。我们可以通过以下步骤来分析:

参考答案

这个问题是一个经典的逻辑推理问题,涉及到推理和知识共享的概念。我们可以通过以下步骤来分析:

问题描述重述

  • 共有100个学生,每个人只能看到其他人头上的帽子颜色,而看不到自己头上的帽子颜色。
  • 每顶帽子要么是白色,要么是黑色。
  • 总共有5个学生戴了白帽子。
  • 老师会每隔一分钟询问一次,直到所有戴白帽子的学生都举手为止。

分析与推理

  1. 如果只有1个学生戴白帽子:

    • 这个学生会看到其他99个人都戴黑帽子。根据老师的提示,“有人戴白帽子”,这个学生知道自己一定戴了白帽子,所以在第一分钟举手。
  2. 如果有2个学生戴白帽子:

    • 这两个人每个人都能看到另一个戴白帽子的学生,并且会认为可能自己戴的是黑帽子。
    • 在第一分钟,没有人举手,因为每个人都在等着看别人是否会举手。
    • 当他们在第二分钟看到对方没有举手时,他们就会意识到自己也戴了白帽子。于是两个人都会在第二分钟举手。
  3. 如果有3个学生戴白帽子:

    • 每个戴白帽子的学生都能看到其他两个戴白帽子的学生,并且假设自己可能戴的是黑帽子。
    • 在前两分钟,他们不会举手,因为他们会认为可能是2个人戴了白帽子。
    • 在第三分钟,他们会意识到:如果我没有戴白帽子,前两个戴白帽子的人应该已经在第二分钟举手了。但他们没有,所以我一定也是戴了白帽子。于是,三个学生会在第三分钟举手。
  4. 以此类推到5个学生:

    • 当有5个学生戴白帽子时,他们每个人都能看到另外4个人戴白帽子。前四分钟,他们都不会举手,因为每个人都在等待是否有4个人戴白帽子。
    • 在第五分钟,他们会意识到:如果我没有戴白帽子,其他4个人应该已经在第四分钟举手了。由于没有人举手,他们推断自己也戴了白帽子,所以他们会在第五分钟举手。

结论

当有5个学生戴白帽子时,他们将在第五分钟全部举手。

30. 圆桌射击游戏

难度:3 · 类型:QA

圆桌上有1到1000号,1号右手边是2号,左手边是1000号。1号开枪打死2号,把枪交给3号,3号打死4号交给5号。如此继续下去,999号打死1000号后把枪交给1号,之后继续循环。请问最后留下来的是几号?

题目要点

977号

参考答案

977号

假设有 1024 个玩家,从 1 号起轮流开始游戏,则最终 1 号必然留下。

在第一轮,第 47 号开抢红包后,桌上仅剩 1000 人。从第 49 号开始重新编号为 1~1000 ,继续游戏。

那么从现在的 1 号(原先的 49 号开始执行任务)。这样 1000 人的游戏就变成了 1024 人游戏的一个子过程,最终留下来的人是原 1 号,现在的 977 号(原 1024 号现在是 1024 - 49 + 1 = 976 ,所以原 1 号现在是 977 号)。

2 <em>1</em>.png

31. 小白鼠试毒问题进阶

难度:3.5 · 类型:QA

有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。 请问最少用多少只小白鼠,在1小时内一定可以找出至少14瓶无毒的水?

题目要点

答案为3只

参考答案

答案为3只

解析:

具体步骤

将16瓶水两瓶为一组,组号标为A1-A8,三只小白鼠分别标号为b1、b2、b3。

  • A1,001,只让b1喝
  • A2,010,只让b2喝
  • A3,011,让b1、b2喝
  • A4,100,只让b3喝
  • A5,101,b1、b3喝
  • A6,110,b2、b3喝
  • A7,111,让b1、b2、b3喝
  • A8组不喝.

结果

  • 如果只有b1死了,b2、b3都活着,那么有毒的水在A1组里,剩下的14瓶无毒;
  • 如果只有b2死了,b1、b3都活着,则A2组有毒;
  • 如果b1、b2死,b3活,则A3组有毒;
  • 如果只有b3死了,b1、b2都活着,则A4组有毒;
  • 如果b1、b3死,b2活,则A5有毒;
  • 如果b2、b3死,b1活,则A6有毒;
  • 如果三只全死,A7组有毒;
  • 如果三只全活,A8有毒。

32. 小白鼠试毒问题

难度:3 · 类型:QA

现在有 1000 瓶药水,其中有 1 瓶毒药,毒药药性发作致死时间为 1 小时。现在有 1 个小时的时间找出毒药,那么至少需要多少只小白鼠来试毒?假设药水量无限,可以无限稀释,喝药时间不计。

题目要点

答案是10只

参考答案

答案是10只

解析

给1000个瓶分别标上如下标签(10位长度):

  • 0000000001 (第1瓶)
  • 0000000010 (第2瓶)
  • 0000000011 (第3瓶)
  • 1111101000 (第1000瓶)

从编号最后1位是1的所有的瓶子里面取出1滴混在一起(比如从第一瓶,第三瓶,.里分别取出一滴混在一起)并标上记号为1.给第一个小白鼠喝。

  • 从编号倒数第2位是1的所有的瓶子里面取出1滴混在一起并标上记号为2.给第2个小白鼠喝。
  • 从编号倒数第3位是1的所有的瓶子里面取出1滴混在一起并标上记号为3.给第3个小白鼠喝。
  • 从编号倒数第4位是1的所有的瓶子里面取出1滴混在一起并标上记号为4.给第4个小白鼠喝。
  • 从编号倒数第5位是1的所有的瓶子里面取出1滴混在一起并标上记号为5.给第5个小白鼠喝。
  • 从编号倒数第6位是1的所有的瓶子里面取出1滴混在一起并标上记号为6.给第6个小白鼠喝。
  • 以此类推…

24小时后过来检查:

  • 如果只有第一个小白鼠死了。即00000 00001,则第1瓶有毒。
  • 如果只有第1,4个小白鼠死了。即00000 01001,则第9瓶有毒。
  • 以此类推…

33. 汽车所停车位的编号是多少?

难度:3 · 类型:QA

image.png

题目要点

87

参考答案

87

将图片倒出来看

34. 最大的钻石

难度:3.5 · 类型:QA

1 楼到 n 楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从 1 楼到 n 楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到「最大」的一颗?

题目要点

题中包含一个隐藏条件:随机放置。所有的分析都是基于随机放置给出的。换句话说,如果放置钻石是人为干预大小,那么本题的所以分析则全部不成立。

参考答案

题中包含一个隐藏条件:随机放置。所有的分析都是基于随机放置给出的。换句话说,如果放置钻石是人为干预大小,那么本题的所以分析则全部不成立。

其实这个问题的原型叫做秘书问题,该类问题全部属于最佳停止问题。

这类问题都有着统一的解法:

1.png

所以到我们的题目里,我们也是可以直接给出答案:我们要选择先放弃前 37%(就是1/e)的钻石,此后选择比前 37% 都大的第一颗钻石。

35. 怎么用3升和5升的桶量出4升的水?

难度:2 · 类型:QA

题目要点

首先用三升水桶装满水,倒入五升水桶

参考答案
  • 首先用三升水桶装满水,倒入五升水桶
  • 再次倒满三升水桶,填满后继续倒入五升水桶,直到五升水桶倒满
  • 清空五升水桶,将三升水桶的一升水倒入
  • 再次填满三升水桶,倒入五升水桶中

此时,5L的水桶中,正好有4L的水