Skip to content
Go back

面试智力题汇总——12 大类高频题

面试智力题汇总——12 大类高频题

解题核心思路:先建模 → 抽象本质 → 找规律 → 推广结论。

本文按 12 大类整理了面试中最高频的智力题,每道题都给出「题目 + 核心思路/答案 + 关键推理」,结论先行,便于快速复习。

1. 二进制问题

二进制问题的本质,是用「bit 状态」去映射和编码大量可能性。把「每个单位」看作一个二进制探针,就能用极少的探针区分出极大的状态空间。

1.1 毒药毒白鼠

题目: 有 1000 个一模一样的瓶子,其中 999 瓶是普通的水,1 瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在只有 10 只小白鼠和 1 个星期的时间,如何检验出哪个瓶子有毒药?

核心思路: 本质是用 10 个二进制位表示 $2^{10} = 1024$ 个编号,覆盖 1000 个瓶子。

关键推理:

本质: 用 10 个 bit 状态映射 1000 种可能性,每只老鼠是一个二进制「探针」。

想一想:为什么 10 只老鼠就够测 1000 瓶?把每只老鼠看作一个二进制位,能表示多少种状态?

每只老鼠只有「死 / 活」两种结果,10 只老鼠就是 10 个 bit,共 $2^{10} = 1024$ 种组合,超过 1000,足够给每瓶药分配唯一编号。关键不是「让老鼠一瓶瓶试」,而是让「死老鼠的集合」与「毒药瓶的二进制位」一一对应——每只老鼠充当一个 bit 探针。

1.2 分金块问题

题目: 工人为老板打工 7 天可获得一块金子,老板每天必须恰好发给工人当天应得的份额,只能切两刀,如何每天发工资?

核心思路: 用二进制思想,将金块切分为能组合出 1~7 任意份额的最小集合。

关键推理:

天数发放方式
第 1 天给 1/7
第 2 天给 2/7,收回 1/7
第 3 天再给 1/7(合计 3/7)
第 4 天给 4/7,收回 1/7 和 2/7
以此类推

扩展: 发 15 天工资,分为 $\dfrac{1}{15}$、$\dfrac{2}{15}$、$\dfrac{4}{15}$、$\dfrac{8}{15}$(切三刀)。

1.3 1000 个苹果装 10 个箱子

题目: 将 1000 个苹果装入 10 个箱子,使得任意 1~1000 的数量都可以通过若干箱子组合取出。

核心思路: 二进制按位表示,每个箱子对应一个二进制权重。

装箱方案:

箱子苹果数二进制权重
11$2^0$
22$2^1$
34$2^2$
48$2^3$
516$2^4$
632$2^5$
764$2^6$
8128$2^7$
9256$2^8$
10489(剩余)补余

验证: 前 9 个箱子总计 $1+2+\cdots+256 = 511$,加上第 10 箱 $489$,总计 $1000$。

2. 先手必胜问题

核心模型: 博弈论中的 Nim 游戏,关键是找到「不变量」或「平衡态」。谁把局面维持/送入平衡态,谁就掌握主动权。

2.1 抢 30 必胜策略

题目: 两人轮流报数,每次可报 1 或 2,最先报到 30 的人获胜。

核心思路: 每轮两人合计最多报 $1+2=3$。

关键推理:

结论: 先手喊 3,之后每次补到 3 的倍数,先手必胜。

想一想:为什么先手要先抢 3 的倍数,之后每次「补到 3」就能必胜?

因为每轮两人合计最多报 3 个数(1 + 2),谁把局面控制在 3 的倍数,谁就能保证无论对方报 1 还是 2,下一轮都能把总数补回 3 的倍数。抢 30 的本质就是「控制不变量(3 的倍数)」——维持平衡态的人赢。

2.2 100 本书必胜取法

题目: 100 本书,每次取 1~5 本,保证最后一次是自己取。

核心思路: 每轮两人合计最多取 $1+5=6$。

关键推理:

2.3 轮流拿石子(标准 Nim)

题目一: N 颗石子,每次取 1~M 颗,先取完者胜。

条件结果
$N \le M$先手必胜(一次取完)
$N \bmod (M+1) = 0$先手必败
$N \bmod (M+1) \ne 0$先手必胜

题目二: 多堆石子,每次从任意一堆取任意数量。

模型抽象(Sprague-Grundy 定理):

题目三: n 颗带编号石头,每次取 1 颗或编号连续的 2 颗。

策略: 先取最中间的数字(奇数取正中间 1 个,偶数取正中间 2 个),将序列分割为对称两半。之后镜像跟随对方操作,永远是最后取完的人。

3. 推理题

3.1 掰巧克力

题目: $N \times M$ 块巧克力,每次掰一行或一列,掰成 $1 \times 1$ 需要几次?

核心思路: 每掰一次,一块变两块,总块数 +1。从 1 块变为 $N \times M$ 块需要 $N \times M - 1$ 次

3.2 辩论赛场数

题目: 1000 人参加 1v1 辩论赛,输了退出,需要安排几场?

核心思路: 每场比赛淘汰一人,最终剩 1 人,需淘汰 999 人,故需安排 999 场

3.3 时针分针秒针重合次数

题目: 24 小时内,时针、分针、秒针重合几次?

关键推理:

结论: 24 小时内三针重合 22 次

3.4 蚂蚁走树枝

题目: N 只蚂蚁在长度为 M 的树枝上,蚂蚁相碰各自反向,求时间/总距离。

核心建模技巧: 相碰后反向,等价于两只蚂蚁穿过彼此继续前行,个体不重要,边界位置才重要。

经典延伸(小鸟飞行问题):

3.5 旅馆的 1 元钱

题目: 三人各付 10 元共 30 元,老板退 5 元被小弟贪 2 元,三人各拿 1 元。三人实付 27 元,+ 小弟 2 元 = 29 元,还差 1 元?

解析(逻辑陷阱): 计算思路出错。正确分配应为:

$$\text{老板 25 元} + \text{小弟 2 元} + \text{三人各 1 元} = 30 \text{ 元} \checkmark$$

27 元本身已包含小弟的 2 元(27 = 25 + 2),不应再加,这是重复计算导致的假矛盾。

4. 概率问题

4.1 两孩子问题

题目: 家里有两个孩子,已知其中一个是女孩,另一个也是女孩的概率?

解题(条件概率):

$$P(\text{另一个也是女} \mid \text{至少一个是女}) = \frac{P(\text{女女})}{P(\text{至少一个是女})} = \frac{1/4}{3/4} = \boxed{\dfrac{1}{3}}$$

想一想:为什么已知「至少一个是女孩」时,另一个也是女孩的概率是 1/3 而不是 1/2?

因为「至少一个是女孩」把样本空间从 4 种(男男、男女、女男、女女)缩到 3 种(男女、女男、女女),其中只有「女女」一种满足「另一个也是女孩」。条件概率的分母变了——若题目说的是「老大是女孩」,那才是 1/2。

4.2 绳子剪两刀能构成三角形

题目: 一条绳子随机剪两刀,能构成三角形的概率?

解题(数形结合): 设两个切点坐标 $(x, y)$,在 $[0,1]^2$ 的正方形中,满足三角形三边条件的面积为 $\dfrac{1}{4}$。

$$P = \boxed{\dfrac{1}{4}}$$

4.3 圆上两弦相交概率

题目: 圆上随机画两条弦,相交的概率?

解题: 圆上取 4 个点,确定两条弦的方式有 3 种(连接方式),只有 1 种情况相交。

$$P = \boxed{\dfrac{1}{3}}$$

4.4 100 个奴隶猜帽子颜色

题目: 100 人纵列,每人只能说「黑」或「白」猜自己帽子颜色,最大存活策略?

最优策略(奇偶校验):

结果: 第 100 人 50% 存活,其余 99 人100% 存活,期望存活 99.5 人

变体(只能看前一人): 偶数位说出前一人颜色,保证奇数位 100% 存活,偶数位 50%,期望 75 人存活。

4.5 三枪手决斗

题目: 甲(8/10)、乙(6/10)、丙(4/10)三人同时开枪,谁活下来概率最大?

分析:

结论: 尽管丙命中率最低,考虑到博弈结构,丙存活概率最大

5. 水桶/计时/赛马问题

5.1 水桶取水问题

条件目标方法思路
3L + 5L取 4L5 倒满 → 倒入 3L 桶 → 5L 剩 2L → 倒空 3L → 2L 倒入 3L → 再倒满 5L → 倒入 3L 桶
5L + 6L取 3L反复互倒凑出余数
10L + 7L + 3L各 5L不停向小桶中倒,把数字凑出来
7 两 + 11 两勺取 2 两分析 2 的组合:$11 - 7 \times … = 2$

通用方法:扩展欧几里得算法,凑出目标值。

5.2 沙漏计时

6 分钟 + 8 分钟,计 10 分钟:

4 分钟 + 7 分钟,计 9 分钟:

5.3 烧绳计时

利用同时点两端(速度翻倍):

目标时间方法
30 分钟一根绳两头同时点
15 分钟两根绳,第一根两头点,第一根烧完(30min)时点第二根两头
45 分钟第一根单头点,烧完(60min)前先点第二根两头
75 分钟第一根单头点 60 分钟,第二根再两头点 15 分钟

5.4 蜡烛 15 分钟

题目: 两根蜡烛各需 1 小时,如何确定 15 分钟?

策略:

  1. 点燃第一根的一端,同时点燃第二根的两端
  2. 第二根烧完 = 30 分钟。
  3. 此时点燃第一根另一端
  4. 此后第一根烧完 = 再过 15 分钟

5.5 赛马找最快

25 匹马,5 条跑道,找最快的 3 匹:

解题步骤:

  1. 分 5 组各跑一次 → 5 场,每组取前三名。
  2. 5 组第一名同台竞技 → 1 场,确定总第一。
  3. 分析:总第二只可能在总第一那组的第二 or 第二组的第一;总第三候选更有限。
  4. 安排剩余候选者决赛 → 1 场。

共 7 场 即可确定前 3 名。

6. 过河/过桥问题

6.1 三人三鬼过河

约束: 任意岸上,人数不能少于鬼数(否则被吃)。船每次运 1~2 人/鬼。

核心思路: 过程中时刻维持「人 ≥ 鬼」约束,利用鬼划船回来策略。

6.2 限时过桥(经典 17 分钟问题)

A、B、C、D 过桥时间:1、2、5、10 分钟,在 17 分钟内全部通过。

步骤操作耗时
A、B 同行过桥2 min
A 返回送手电1 min
C、D 同行过桥10 min
B 返回送手电2 min
A、B 同行过桥2 min
合计17 min

7. 最优解问题

7.1 小猴子搬香蕉

题目: 100 根香蕉,50 米距离,最多搬 50 根,每走 1 米吃 1 根,最多送到家多少根?

核心思路:

结论: 最多送到家 ~16 根(精确计算需分段考虑)。

7.2 高楼扔鸡蛋

题目: 2 个鸡蛋,100 层楼,找鸡蛋不碎的临界层,最少尝试次数?

方案一:二分查找 → 最坏需要 50 次

方案二:线性 + 二分组合(最优)

模型: 假设最坏情况下最多允许 $x$ 次操作,第一个鸡蛋从第 $x$ 层开始,每次降低 1 层:

$$x + (x-1) + (x-2) + \cdots + 1 \ge 100$$

$$\frac{x(x+1)}{2} \ge 100 \Rightarrow x = 14$$

策略: 第一个鸡蛋依次在 14、27、39、50… 层扔,一旦碎了,第二个从上一次安全层线性扫描。

结论: 最坏情况不超过 14 次

想一想:为什么 2 个鸡蛋不能纯二分,最优是 14 次?14 是怎么算出来的?

二分法第一颗蛋第一次就上 50 楼,碎了只剩一颗蛋,只能从 1 楼一层层扫,最坏 50 次。更优做法是让第一颗蛋的试探间隔「递减」:14、27、39、50……这样无论第一颗在哪一层碎,总次数都不超过 14。这个 14 来自 $x+(x-1)+\cdots+1 \ge 100$,把最坏情况平均摊到每一层。

7.3 空瓶换饮料

题目: 1000 瓶饮料,3 个空瓶换 1 瓶,最多喝几瓶?

解题:

$$\text{总计} = 1000 + 498 + 1 = \boxed{1499} \text{ 瓶}$$

8. 数字问题

8.1 11-22-33-44 排列

题目: 排列 1,1,2,2,3,3,4,4,使两个 1 之间有 1 个数,两个 2 之间有 2 个数,以此类推。

解法: 先放 4,再放 3,再放 2,最后放 1:

4 1 3 1 2 4 3 2
2 3 4 2 1 3 1 4

8.2 Rand5 生成 Rand7

题目: 已有 rand5()(等概率生成 1~5),构造 rand7()

方法(拒绝采样):

int rand7() {
    int x = Integer.MAX_VALUE;
    while (x > 21) {
        x = 5 * (rand5() - 1) + rand5();  // 生成 1~25 均匀分布
    }
    return x % 7 + 1;
}

9. 重量/砝码问题

9.1 8 个乒乓球找重的

题目: 8 个乒乓球,1 个偏重,天平称几次?

解法: 分成 3、3、2 三组:

  1. 第 1 次:称 3 vs 3
    • 平衡 → 重球在剩余 2 个中,再称 1 次 → 共 2 次
    • 不平衡 → 重球在偏重的 3 个中,取其中 2 个再称 1 次 → 共 2 次

结论: 最少 2 次

9.2 盐的分割(7g + 2g 砝码)

题目: 7g、2g 砝码各一,天平一个,5 次内将 140g 盐分成 50g 和 90g。

步骤:

  1. 将 140g 用天平平分 → 70g、70g(1 次)。
  2. 用 7g 砝码从 70g 中分出 7g×9=63g……

利用天平平分特性 + 砝码组合凑数。

9.3 9 个砝码找最轻(天平无刻度)

分成 3、3、3 三组:

  1. 称 3 vs 3,平衡则轻砝码在第三组,不平衡取轻侧组(1 次)。
  2. 在 3 个中取 2 个再称,平衡则第三个是最轻的(1 次)。

结论: 2 次

9.4 10 组砝码找轻的一组(带刻度秤)

题目: 10 组砝码,每组 10 个,每个 10g,其中一组每个 9g,只称 1 次。

策略:

结论: 1 次 即可确定。

9.5 药丸问题(20 瓶 / 4 瓶变种)

20 瓶药丸: 第 $i$ 瓶取 $i$ 粒,标准总重 $= \sum_{i=1}^{20} i \times 1 = 210g$,多出重量 $\div 0.1$ = 问题瓶编号。

4 瓶药丸: 第 $i$ 瓶取 $i$ 粒,标准 $= 10g$,多出克数对应编号。

9.6 6 个苹果找坏的

题目: 6 个苹果,1 个坏的(重量不同),称几次?

策略:

  1. 取 4 个,左右各 2 个称
    • 平衡:坏的在剩余 2 个里,拿其中 1 个与好苹果比较 → 2 次总计
    • 不平衡:从左取 1 个换右 1 个
      • 仍不平衡:坏的是两个固定位置之一 → 再称 1 次 → 3 次总计
      • 变平衡:坏的是被换出的那个 → 3 次总计

10. 灯泡开关问题

10.1 三盏灯找开关(经典)

题目: 房外 3 个开关,进房一次,找出对应关系。

策略:

  1. 开关 A 打开,等 10 分钟后关掉。
  2. 开关 B 打开。
  3. 进房:亮的 → B;暗但热的 → A;暗且凉的 → C。

10.2 圆环 100 个灯泡全亮

规则: 按一个灯泡,改变它和相邻两个灯泡的状态。

三步法:

  1. 步骤一: 从 1 到 98 遍历,遇到暗的按下一个灯泡使其变亮,最终 99、100 可能有暗。
  2. 步骤二: 处理边界情况,令唯一暗的灯泡编号为 1,将剩余 99 个以 3 个为一组,按每组中间的灯泡 → 全暗。
  3. 步骤三: 全部按一遍 → 全亮。

N 个灯泡的一般结论:

N 的形式是否一定有解
$N = 3k+1$一定有解
$N = 3k+2$一定有解
$N = 3k$不一定(需分情况讨论)

11. 蓝眼睛 / 疯狗 / 耳光问题

这三道题是同构问题,本质是公共知识(Common Knowledge)的归纳推理。

11.1 蓝眼睛问题

题目: 岛上有 $c$ 个蓝眼睛的人,游客宣布「至少有 1 个蓝眼睛的人」,几天后蓝眼睛们离开?

归纳推理(数学归纳法):

结论: $c$ 个蓝眼睛的人恰好在第 $c$ 晚全部离开

想一想:游客说的「至少有一个蓝眼睛」明明岛上人尽皆知,为什么这句话会触发连锁离开?

关键在于这句话把「人人知道」升级成了「公共知识」——我知道、你知道我知道、你知道我知道你知道……。$c=1$ 的人第一晚就能推断「我看不到蓝眼睛,那只能是我」;$c=2$ 的人等到第一晚没人走,才推出「我看到的那个人也在等,说明我也蓝」。归纳下去就是第 $c$ 晚全部离开。

11.2 疯狗问题

题目: 50 只狗中有若干只病狗,第三天才有枪响,共死了几只?

逻辑推导(同蓝眼睛):

11.3 耳光问题

题目: 第三次关灯才有人打耳光,有多少人戴黑帽?

结论: 3 个人戴黑帽(同理,第 $n$ 次才有响声 = $n$ 人戴黑帽)。

12. 其他问题

12.1 海盗分金币

题目: 5 个海盗分 100 枚金币,超半数同意方案通过,1 号最多分多少?

逆向归纳法:

剩余海盗方案分析
5 号单独100
4、5 号4→100,5→04 号不需要 5 号同意
3、4、5 号3→100,4→0,5→03 号只需 1 票
2~5 号2→98,3→0,4→1,5→1收买 4、5 号
1~5 号1→97,2→0,3→1,4→2,5→0收买 3、4 号

1 号最优方案:97、0、1、2、0

变体(过半数即可,不需超半数): 结果变为 1→98,2→0,3→1,4→1,5→0

想一想:为什么逆向归纳要从「只剩 1 个海盗」的局面往前推,而不是从 1 号开始想?

因为每个海盗投票时会想「如果我否决了这个方案,下一个局面我能拿多少」,而这个「下一个局面」又依赖更后面的局面。只有先确定「只剩 1 人」这个确定性终点(他独吞 100),才能一层层反推 2 人、3 人……直到 5 人。正着推没有锚点,反着推有唯一终点。

12.2 不均匀硬币决策

题目: 正面概率 0.7,背面 0.3,如何实现公平决策?

策略: 抛两次:

两种结果概率相等,实现完全公平

12.3 圆上任取三点构成锐角三角形

概率: $\boxed{\dfrac{1}{4}}$

三点 $P_1P_2P_3$ 构成锐角三角形,等价于圆心落在三角形内部,等价于 $P_3$ 落在 $P_1P_2$ 对应弧长相对圆心对称的那段弧内,期望概率 $= \dfrac{1}{4}$。

12.4 变色龙变色问题

题目: 红黄蓝兔子数量分别为 $x, y, z$,何时能全变同色?

结论: 当 $x, y, z$ 中至少两个模 3 同余时,可以全部变为同一种颜色。

即 $(x \bmod 3 = y \bmod 3)$ 或 $(y \bmod 3 = z \bmod 3)$ 或 $(x \bmod 3 = z \bmod 3)$。

12.5 100 只老虎 1 只羊

归纳推理:

100 只(偶数)→ 羊不会被吃。

12.6 红蓝球放桶概率最大化

题目: 100 红 + 100 蓝,放入两桶,随机取到红球概率最大?

策略:

$$P = \frac{1}{2} \times 1 + \frac{1}{2} \times \frac{99}{199} \approx \frac{1}{2} + \frac{1}{4} = \frac{3}{4} \approx 74.9%$$

远高于均分的 50%。

12.7 1000 个苹果分成 5 堆

整数分拆问题(允许空堆 → 隔板法):

$$C_{999}^{4} = \frac{999 \times 998 \times 997 \times 996}{24} \approx 40.8 \text{ 亿种}$$


章末提问

1. 「毒药毒白鼠为什么用二进制?如果每只老鼠有 3 种状态(死/病/活),能测多少瓶?」

结论:因为每只老鼠是独立「探针」,二进制下 10 只老鼠 = $2^{10} = 1024$ 种状态组合,能覆盖 1000 瓶;若每只老鼠有 3 种状态,则 10 只可区分 $3^{10}$ 种情况。本质是「用探针状态数编码可能性」,状态数越大,同样数量探针能编码的可能性越多。

2. 「Nim 游戏里异或值为 0 为什么先手必败?怎么理解平衡态?」

结论:因为异或为 0 的局面对任何操作都会破坏平衡——无论先手取多少,后手都能对称地取回、把异或值重新拉回 0;而终局(全空)异或也是 0。所以「异或为 0」是必败态(留给对手),非 0 是先手可以一步转成 0 的必胜态。

3. 「两孩子问题里『至少一个女孩』和『老大是女孩』,为什么答案不同?」

结论:因为两个条件筛选掉的样本空间不同。「至少一个女孩」剩 3 种(男女/女男/女女),另一个也是女孩的概率 = 1/3;「老大是女孩」剩 2 种(女男/女女),概率 = 1/2。条件信息量越大,分母越小。

4. 「高楼扔鸡蛋如果给你 k 个鸡蛋,怎么推广?」

结论:用动态规划,定义 $dp[i][j]$ = i 个鸡蛋、j 次尝试最多能确定的楼层数,转移方程 $dp[i][j] = dp[i-1][j-1] + dp[i][j-1] + 1$(碎/不碎两种情况)。鸡蛋越多,最优试探间隔越接近二分;鸡蛋越少,越接近线性扫描。

5. 「蓝眼睛问题的关键,是不是游客带来了『新信息』?」

结论:不是。游客说的「至少有 1 个蓝眼睛」人人早已知道,关键是把「人人知道」升级成了「公共知识」(每个人都知道每个人都知道……)。正是这个公共知识让归纳推理有了启动点,才触发第 c 晚连锁离开。


Share this post on:

Previous Post
大数据处理题汇总——通用框架 + 10 道高频题
Next Post
Rand5生成Rand7——拒绝采样的原理与应用