Post

智力题专题

title: 智力题专题 date: 2025-08-30 20:51:07 tags: [八股]

  1. 帽子问题

一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就拍拍手。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第四次关灯, 才拍手声音响起。问有多少人戴着黑帽子?

答案:第几次有人拍手就说明有几个人戴着黑帽子。

这是一个经典的逻辑推理题,关键在于归纳推理共同知识

我们来一步步分析:


题目关键信息:

  • 帽子只有黑、白两种。
  • 黑帽子至少有一顶
  • 每个人都能看到别人头上的帽子,但看不到自己的。
  • 主持人让大家看别人,然后关灯,如果认为自己戴的是黑帽子,就拍手。
  • 第一次关灯:没人拍手。
  • 第二次关灯:没人拍手。
  • 第三次关灯:没人拍手。
  • 第四次关灯:有人拍手。

问:有多少人戴着黑帽子?


推理过程:

我们用归纳法来思考。


情况 1:如果只有 1 顶黑帽子

  • 那个戴黑帽子的人会看到:所有人都是白帽子
  • 他知道黑帽子至少有一顶,所以他立刻推断:“既然我看到的都是白帽子,那黑帽子只能是我自己戴的。”
  • 所以在第一次关灯时,他就会拍手。

但题目中第一次关灯没人拍手 → 所以不可能只有 1 顶黑帽子


情况 2:如果有 2 顶黑帽子

假设是 A 和 B 戴黑帽子。

  • A 看到 B 戴黑帽子,B 看到 A 戴黑帽子。
  • A 会想:“我看到 B 戴黑帽子。如果我戴的是白帽子,那么 B 就会认为他是唯一一个戴黑帽子的人,所以 B 应该在第一次关灯时拍手。”
  • 但第一次关灯没人拍手 → 说明 B 没有拍手。
  • A 推断:“B 没拍手,说明 B 也看到了别人戴黑帽子,那就是我(A)戴了黑帽子。”
  • 所以 A 和 B 都会在第二次关灯时拍手。

但题目中第二次关灯也没人拍手 → 所以不可能只有 2 顶黑帽子


情况 3:如果有 3 顶黑帽子

A、B、C 戴黑帽子。

  • A 看到 B 和 C 戴黑帽子。
  • A 会想:“可能只有 2 顶黑帽子(B 和 C),如果是这样,那么 B 和 C 应该在第二次关灯时拍手。”
  • 但第二次关灯没人拍手 → 说明 B 和 C 也没有拍手。
  • A 推断:“B 和 C 没拍手,说明他们也看到了不止一顶黑帽子,也就是说,除了 B 和 C,还有第三个人戴黑帽子,那个人就是我!”
  • 所以 A、B、C 都会在第三次关灯时拍手。

但题目中第三次关灯还是没人拍手 → 所以不可能只有 3 顶黑帽子


情况 4:如果有 4 顶黑帽子

A、B、C、D 戴黑帽子。

  • A 看到 B、C、D 戴黑帽子(3 顶)。
  • A 会想:“可能只有 3 顶黑帽子(B、C、D),如果是这样,那他们应该在第三次关灯时拍手。”
  • 但第三次关灯没人拍手 → 说明 B、C、D 也没拍手。
  • A 推断:“他们没拍手,说明他们也看到了不止 3 顶黑帽子?不对,等等……他们每个人看到的是另外 3 人戴黑帽,但因为没人拍手,说明他们也怀疑自己戴黑帽。”
  • 更准确地说:A 意识到,如果他自己戴的是白帽子,那么 B、C、D 看到的就只有 2 个黑帽子(彼此),那他们应该像上面“情况3”那样在第三次拍手。
  • 但他们没拍手 → 说明 A 的假设“自己戴白帽子”是错的 → 所以自己也戴黑帽子。
  • 因此,在第四次关灯时,A、B、C、D 同时推断出自己戴黑帽子,于是拍手。

这与题目描述一致:第四次关灯才拍手


✅ 结论:

4 人戴着黑帽子。


🎩 一般规律:

  • 如果有 N 顶黑帽子,那么拍手会发生在第 N 次关灯
  • 因为每个人都需要通过前 N-1 次没人拍手来排除“只有 N-1 顶黑帽子”的可能性,从而推断出自己也戴黑帽子。

题目中是第 4 次拍手 → 所以有 4 顶黑帽子


  1. 史密斯夫妇握手问题

史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以­上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次

解答:

  1. 总共10个人,每个人不与自己握手,不与配偶握手,不与同一个人握超过一次手,所以每个人最多握8次手,最少0次;
  2. Mr.Smith问其它9个人握了几次手,各人回答不一样,所以每个人的握手次数刚好为0-8次,每种不同次数有1个人;
  3. 有且只有一个人握了8次手,称之为A,即A与其配偶以外的所有人都握了手;
  4. 记A的配偶为a,除了A夫妇以外,所有人都至少握了1次手(和A),所以握手0次的肯定是a;
  5. 从10个人中去掉A夫妇,因为A与其余每个人握了1次手,而a没有与别人握手,所以去掉A夫妇后,其它人的握手次数为1-7(不算Mr.Smith),再去掉他们各自与A握的那次手不算,则各人的握手次数为0-6,还是每种不同次数刚好有1个人;
  6. 重复第3-5步4次,直到去掉4对夫妇,最终剩下Mr.&Mrs.Smith,这时Mrs.Smith的握手次数为0,加上4次循环中去掉的4次握手,她总共握­了4次手,与每对夫妇中的某一位各握了一次。

总结:史密斯夫妇邀请了N-1对夫妻,史密斯夫人就会和N-1个人握手

  1. 三人三鬼过桥问题

  2. 赛马问题

  3. 随机数问题:rand5 到 rand7

首先我们要知道随机数生成规则:randN函数生成1到N之间的均匀分布随机数。

randNN = N(randN - 1) + randN

生成randN^2需要使用randN,N相当于步长,randN相当于偏移量

然后再来看如何使用rand5生成rand7,我们可以使用rand5生成rand25的随机数,然后将25分成相同的7份,舍去大于21的结果,最后对每个结果取模7加1即可。

1
2
3
4
5
6
7
int rand7() {
    int x = INT_MAX;
    while(x > 21) {
        x = 5*(rand5()-1) + rand5();
    }
    return x % 7 + 1;
}
  1. 砝码称重问题,这里举几个经典的。

【1】十组砝码每组十个,每个砝码都是10g重,但是现在其中有一组砝码每个都只有9g重,现有一个能显示克数的秤,最少称几次能找到轻的那组?参考回答:1次

解答:将每组的第i个砝码取出,称重,正常情况下应该是10g*10组=100g,如果称重结果是99g,那么轻的那组就是第1组,如果是98g就是第2组,以此类推。

【2】有12个球,其中有一个球的重量与其他球不同,且不知道是轻了还是重了,现有一个天平,最少称几次能找出这个球?参考回答:3次

解答:第一次称重,将12个球分成3组,每组4个,称任意两组,如果平衡则异常球在第三组,如果不平衡则异常球在两组中。第二次称重,将重球组再分成3组,每组1个,称任意两组,如果平衡则重球在第三组,如果不平衡则重球在较重的一组。第三次称重,找出重球。不管有多少球,肯定是3的倍数,要分成三组。

  1. 利用空瓶换饮料,最多喝几瓶

有a瓶饮料,b个空瓶换c瓶,最多喝几瓶;

解答:总饮用数 = a + floor((a - c) / (b - c))

  1. 毒药毒白鼠

有1000瓶药水,只有1瓶毒药,毒药1天生效。现在有十只白鼠,要在一天内找到这瓶毒药。

  1. 囚徒猜帽子问题

记住黑帽奇偶性

图片中的文字内容是:

10、小猴子搬香蕉

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

(提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。)

参考回答:这种试题通常有一个迷惑点,让人看不懂题目的意图。此题迷惑点在于:走一米吃一根香蕉,一共走50米,那不是把50根香蕉吃完了吗?如果要回去搬另外50根香蕉,则往回走的时候也要吃香蕉,这样每走一米需要吃掉三根香蕉,走50米岂不是需要150根香蕉?

其实不然,本题关键点在于:猴子搬箱子的过程其实分为两个阶段,第一阶段:来回搬,当香蕉数目大于50根时,猴子每搬一米需要吃掉三根香蕉。第二阶段:香蕉数《=50,直接搬回去。每走一米吃掉1根。

This post is licensed under CC BY 4.0 by the author.