智力题专题
title: 智力题专题 date: 2025-08-30 20:51:07 tags: [八股]
- 帽子问题
一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就拍拍手。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第四次关灯, 才拍手声音响起。问有多少人戴着黑帽子?
答案:第几次有人拍手就说明有几个人戴着黑帽子。
这是一个经典的逻辑推理题,关键在于归纳推理和共同知识。
我们来一步步分析:
题目关键信息:
- 帽子只有黑、白两种。
- 黑帽子至少有一顶。
- 每个人都能看到别人头上的帽子,但看不到自己的。
- 主持人让大家看别人,然后关灯,如果认为自己戴的是黑帽子,就拍手。
- 第一次关灯:没人拍手。
- 第二次关灯:没人拍手。
- 第三次关灯:没人拍手。
- 第四次关灯:有人拍手。
问:有多少人戴着黑帽子?
推理过程:
我们用归纳法来思考。
情况 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 顶黑帽子。
- 史密斯夫妇握手问题
史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次
解答:
- 总共10个人,每个人不与自己握手,不与配偶握手,不与同一个人握超过一次手,所以每个人最多握8次手,最少0次;
- Mr.Smith问其它9个人握了几次手,各人回答不一样,所以每个人的握手次数刚好为0-8次,每种不同次数有1个人;
- 有且只有一个人握了8次手,称之为A,即A与其配偶以外的所有人都握了手;
- 记A的配偶为a,除了A夫妇以外,所有人都至少握了1次手(和A),所以握手0次的肯定是a;
- 从10个人中去掉A夫妇,因为A与其余每个人握了1次手,而a没有与别人握手,所以去掉A夫妇后,其它人的握手次数为1-7(不算Mr.Smith),再去掉他们各自与A握的那次手不算,则各人的握手次数为0-6,还是每种不同次数刚好有1个人;
- 重复第3-5步4次,直到去掉4对夫妇,最终剩下Mr.&Mrs.Smith,这时Mrs.Smith的握手次数为0,加上4次循环中去掉的4次握手,她总共握了4次手,与每对夫妇中的某一位各握了一次。
总结:史密斯夫妇邀请了N-1对夫妻,史密斯夫人就会和N-1个人握手
三人三鬼过桥问题
赛马问题
随机数问题: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】十组砝码每组十个,每个砝码都是10g重,但是现在其中有一组砝码每个都只有9g重,现有一个能显示克数的秤,最少称几次能找到轻的那组?参考回答:1次
解答:将每组的第i个砝码取出,称重,正常情况下应该是10g*10组=100g,如果称重结果是99g,那么轻的那组就是第1组,如果是98g就是第2组,以此类推。
【2】有12个球,其中有一个球的重量与其他球不同,且不知道是轻了还是重了,现有一个天平,最少称几次能找出这个球?参考回答:3次
解答:第一次称重,将12个球分成3组,每组4个,称任意两组,如果平衡则异常球在第三组,如果不平衡则异常球在两组中。第二次称重,将重球组再分成3组,每组1个,称任意两组,如果平衡则重球在第三组,如果不平衡则重球在较重的一组。第三次称重,找出重球。不管有多少球,肯定是3的倍数,要分成三组。
- 利用空瓶换饮料,最多喝几瓶
有a瓶饮料,b个空瓶换c瓶,最多喝几瓶;
解答:总饮用数 = a + floor((a - c) / (b - c))
- 毒药毒白鼠
有1000瓶药水,只有1瓶毒药,毒药1天生效。现在有十只白鼠,要在一天内找到这瓶毒药。
- 囚徒猜帽子问题
记住黑帽奇偶性
图片中的文字内容是:
10、小猴子搬香蕉
一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里?
(提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。)
参考回答:这种试题通常有一个迷惑点,让人看不懂题目的意图。此题迷惑点在于:走一米吃一根香蕉,一共走50米,那不是把50根香蕉吃完了吗?如果要回去搬另外50根香蕉,则往回走的时候也要吃香蕉,这样每走一米需要吃掉三根香蕉,走50米岂不是需要150根香蕉?
其实不然,本题关键点在于:猴子搬箱子的过程其实分为两个阶段,第一阶段:来回搬,当香蕉数目大于50根时,猴子每搬一米需要吃掉三根香蕉。第二阶段:香蕉数《=50,直接搬回去。每走一米吃掉1根。