智商题
概述
面试中偶尔会出现逻辑推理题和数学概率题,主要考察你的问题分析能力和思维方式。以下整理了几道经典题目,每题都包含问题描述、解题思路和最终答案。
二进制与信息论
Q: 1000瓶药水,1瓶有毒药,最少需要几只小白鼠一定能找出?
题目: 1000 瓶药水,其中 1 瓶有毒药,服用后一小时毒发,毒药可以无限稀释。一小时内最少用几只小白鼠一定能找出毒药?
解题思路:二进制编码
先简化问题。假设只有 4 瓶药水:
- 把瓶子编号 1、2、3、4
- 把 1、3 混合喂给老鼠 A,把 2、3 混合喂给老鼠 B
- 如果 A 死了 → 1 有毒;如果 B 死了 → 2 有毒;如果 AB 都死了 → 3 有毒;如果 AB 都没死 → 4 有毒
为什么是 1、3 和 2、3?因为这就是二进制编码:
| 老鼠B | 老鼠A | 对应编号 |
|---|---|---|
| 0 | 0 | 0(第4瓶) |
| 0 | 1 | 1(第1瓶) |
| 1 | 0 | 2(第2瓶) |
| 1 | 1 | 3(第3瓶) |
推广规律:
- 8 瓶药水 → 3 只老鼠(2^3 = 8)
- 16 瓶药水 → 4 只老鼠(2^4 = 16)
- 1000 瓶药水 → log2(1000) ≈ 9.97 → 需要 10 只老鼠
答案:10 只
天平与称量
Q: 一个天平,7g和2g砝码各一个,将140g盐分成90g和50g,需要称多少次?
答案:3 次
有两种方案,核心思路都是通过已有砝码的组合凑出目标重量。
方案1:先称出 90g
思路:90g = 70g + 20g。70g 容易得到(140g 的一半)。20g 怎么得到?利用等式 20 + 2 = 15 + 7。
| 次数 | 操作 | 得到的重量 |
|---|---|---|
| 第1次 | 不用砝码,140g 平均分成两份 | 70g + 70g |
| 第2次 | 不用砝码,其中一份 70g 平均分成两份 | 70g + 35g + 35g |
| 第3次 | 2g 砝码放一边,7g 砝码放另一边,35g 盐分别加入两边直到平衡:20g + 2g = 15g + 7g | 70g + 35g + 20g + 15g |
最后 70g + 20g = 90g,剩下 35g + 15g = 50g。
方案2:先称出 50g
思路:50g = 25g × 2。25g 怎么得到?7 × 3 + 2 × 2 = 25。先用砝码凑出小分量再累加。
| 次数 | 操作 | 得到的重量 |
|---|---|---|
| 第1次 | 7g + 2g 砝码放一起,另一端加盐到平衡 | 9g 盐 + 131g 盐 |
| 第2次 | 7g 砝码 + 9g 盐放一起,另一端加盐到平衡 | 16g 盐 |
| 第3次 | 9g + 16g 盐放一起,另一端加盐到平衡 | 25g 盐 |
最后 9g + 16g + 25g = 50g,剩下 90g。
Q: 有8个球,其中1个比其他球重,最少需要称几次一定能找到?
答案:2 次
解题思路:三分法
- 将 8 个球分成三组:A 组 3 个、B 组 3 个、C 组 2 个
- 第1次:A 组 vs B 组
- 天平平衡 → 重球在 C 组
- 天平不平衡 → 重球在较重的那组(3 个球)
- 第2次:
- 如果在 C 组(2 个球):直接称这 2 个球,重的就是目标
- 如果在 A 或 B 组(3 个球):取其中 2 个球各放一边,如果平衡则第 3 个是目标,如果不平衡则重的那个是目标
概率计算
Q: 盒子里3个白球2个黑球,放回抽取两次,颜色不同的概率是多少?
题目: 乒乓球盒子里有 3 个白球和 2 个黑球。抽取一个球放回后再抽取一个球,两次颜色不同的概率是多少?
解题过程:
两次颜色不同有两种情况:
- 先白后黑:(3/5) × (2/5) = 6/25
- 先黑后白:(2/5) × (3/5) = 6/25
答案:6/25 + 6/25 = 12/25
Q: 村庄约定生男孩就停止,若干年后男女比例是多少?
题目: 村庄有个约定,生男孩就结束,生女孩就继续生,直到生出男孩为止。若干年后男女比例是多少?
解题思路:
"直到生出男孩为止"说明:
- 每家生了男孩后便不再生了
- 每家都只有一个男孩
计算每家孩子个数的期望 E(X):
| 孩子数 X | 概率 P |
|---|---|
| 1 | 0.5(第一次就生了男孩) |
| 2 | 0.5^2 = 0.25 |
| 3 | 0.5^3 = 0.125 |
| ... | ... |
E(X) = 1 × 0.5 + 2 × 0.5^2 + 3 × 0.5^3 + ... = 1/0.5 = 2
每家孩子期望为 2 个,其中男孩恒为 1 个,所以女孩期望也是 1 个。
答案:男女比例 1:1(相等)
这道题的关键洞察是:生育策略不影响每次生育时男女概率各 50% 的事实。不管用什么策略,总体上男女数量是相等的。
倒推与编程
Q: 猴子吃桃问题:第10天剩1个,原来有多少个?
题目: 一堆桃子,猴子第一天吃了一半加一个,第二天又吃了一半加一个,以此类推,到第 10 天时只剩下 1 个桃子。原来有多少个?
解题思路:从第10天反推
每天吃掉"一半加一个",反推公式:前一天的桃子数 = (当天剩余 + 1) × 2
| 天数 | 桃子数 | 计算过程 |
|---|---|---|
| 第10天 | 1 | 题目给定 |
| 第9天 | 4 | (1 + 1) × 2 |
| 第8天 | 10 | (4 + 1) × 2 |
| 第7天 | 22 | (10 + 1) × 2 |
| 第6天 | 46 | (22 + 1) × 2 |
| 第5天 | 94 | (46 + 1) × 2 |
| 第4天 | 190 | (94 + 1) × 2 |
| 第3天 | 382 | (190 + 1) × 2 |
| 第2天 | 766 | (382 + 1) × 2 |
| 第1天 | 1534 | (766 + 1) × 2 |
答案:1534 个
代码实现:
public static void main(String[] args) {
int total = 1;
for (int i = 10; i > 1; i--) {
total = (total + 1) << 1; // <<1 等价于 ×2
}
System.out.println(total); // 输出 1534
}水桶问题
Q: 5升和3升水桶,如何得到4升水?
解题步骤:
| 步骤 | 操作 | 5升桶 | 3升桶 |
|---|---|---|---|
| 1 | 装满 5 升桶,倒入 3 升桶 | 2升 | 3升 |
| 2 | 倒空 3 升桶,把 5 升桶中的 2 升倒入 3 升桶 | 0升 | 2升 |
| 3 | 装满 5 升桶,往 3 升桶倒(还能装 1 升) | 4升 | 3升 |
答案:3 步操作,5 升桶中剩余 4 升水
解题技巧总结
| 题型 | 常用方法 |
|---|---|
| 信息编码类(毒药/开关) | 二进制编码,N 个元素需要 log2(N) 次 |
| 天平称量类 | 三分法(每次分三组),N 个需要 log3(N) 次 |
| 概率计算类 | 列举所有互斥事件,逐个计算再求和 |
| 倒推类 | 从已知结果反向推导 |
| 容器倒水类 | 通过辗转相除法构造目标量 |
面试中遇到智商题怎么办?
- 不要急着算,先理清题意,确认你理解对了
- 先说思路,再算答案。面试官更看重思维过程,即使最终没算对也不会太减分
- 尝试简化,遇到大数字的问题先用小数字试试(如 1000 瓶先从 4 瓶开始想)
- 画图/列表,视觉化有助于理清逻辑
- 和面试官互动,适当确认条件、说出你的假设,这不是考试而是讨论
- 程序员思维是加分项,如果能从编程角度(二进制、递归、穷举)来解释,比纯数学推导更让面试官满意
- 卡住了就说,说"这个我需要想一下"比沉默好,然后边想边说你的尝试方向