我知道你不知道,我到底知不知道?
请点赞关注,你的支持对我意义重大。 ? Hi,我是小彭。本文已收录到 GitHub · AndroidFamily[1] 中。
前言
大家好,我是小彭。
在计算机面试中,逻辑类题目是规模以上互联网公司的必考题。由于题目花样百出,准备难度较大,题海战术可能不是推荐的做法。在这个系列里,我将精选十道非常经典的逻辑题,希望能帮助你找到解题思路 / 技巧。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。
系列文章:
- 我知道你不知道,我到底知不知道[2]
- 至少要几个砝码,可以称出 1g ~ 40g 重量[3]
- 舞会上有多少顶黑帽?[4]
- 25 匹马 5 条赛道,最快需要几轮求出前 3 名?[5]
1. 题目描述
A 与 B 好奇问 C 的年龄,爱卖关子的 C 给出了以下 11 个数字,C 的年龄就是其中的一个:35、36、38、42、45、46、51、55、57、61、62,并且分别把年龄的十位数告诉给 A,把个位数告诉给 B。此时,A 和 B 发生以下对话:
A:我不知道 C 的年龄,我知道你不知道。
B:原本我不知道的,现在我知道了。
A:现在我也知道了。
那么,请问 C 的年龄是?
2. 解题关键
- 1、我知道你不知道的含义: 这句话的含义是:根据我的现有信息,可以知道你未取得命题的充分条件。更通俗的说法是,我不知道你现在是什么情况,反正一定不是那个可以推断出结果的状态;
- 2、“唯一性” 隐含的充分条件: 有 36、46、57 这三个数,假设已知目标数的个位数是 7 ,那么很明显这个数就是 57 了(因为只有唯一个数字个位是 7)。
3. 题解
- 首先我们观察 11 个数字: (35、36、38、42、45、46、51、55、57、61、62)
十位数有 3、4、5、6 这几种可能,都会匹配不唯一个数字。
个位数有 1、2、5、6、7、8 这几种可能,其中 1、2、5、6 会匹配不唯一个数字,而 7、8 会分别匹配 57、38 两个数字。
- A:我不知道 C 的年龄,我知道你不知道。
首先,A 说 “不知道 C 的年龄”,说明十位数是不唯一的。由于 十位数 3、4、5、6 都对应多个数,目前无法排除任何数字;
随后 A 又说 “我知道你不知道”,in other words,“根据我的现有信息,可以知道你未取得命题的充分条件”,in other words,“我知道你手上的个位数一定不是 7 或 8 ”。
为什么 A 敢断言:“你手上的个位数一定不是 7 和 8” 呢?一定是 A 手中的十位数不是 3,也不是 5 的时候。只有这样才能确定最终答案不是 3_ 或 5_ ,也就不可能是 38、57 两个数字。
- 此时,观察剩下以下数字: (42、45、46、61、62)
个位数有 1、2、5、6 这几种可能,其中 个位数 2 会匹配多个数字,而 个位数 1、5、6 会分别匹配 61、45、46 三个数字。
- B:原本我不知道的,现在我知道了。
此时,B 说 “我知道了”,说明达到唯一性充分条件,那么年龄个位数一定不是 2 。
- 此时,观察剩下以下数字: (61、45、46)
十位数有 4_ 和6_ 这两种可能,其中 十位数 4 会匹配 2 个数字,而 十位数 6 会唯一匹配 61 这个数字。
- A:现在我也知道了。
此时,A 说 “我也知道了”,说明达到唯一性充分条件,那么年龄是 61。
我是小彭,带你构建 Android 知识体系。
参考资料
[1]
GitHub · AndroidFamily: https://github.com/pengxurui/AndroidFamily
[2]
我知道你不知道,我到底知不知道: https://juejin.cn/post/6902829580013436942
[3]
至少要几个砝码,可以称出 1g ~ 40g 重量: https://juejin.cn/post/6903460612886495245
[4]
舞会上有多少顶黑帽?: https://juejin.cn/post/6903524335193948167/
[5]
25 匹马 5 条赛道,最快需要几轮求出前 3 名?: https://juejin.cn/post/6903861591188783112/
相关文章
- 手绘图解java类加载原理
- Java中的线程到底有哪些安全策略
- Java中观察者模式与委托,还在傻傻分不清
- 一图详解java-class类文件原理
- Java遇上SPL:架构优势和开发效率,一个不放过
- 长篇图解java反射机制及其应用场景
- [java并发编程]基于信号量semaphore实现限流器
- java并发编程-StampedLock高性能读写锁
- 【java并发编程】ReentrantLock 可重入读写锁
- 【java并发编程】Lock & Condition 协调同步生产消费
- Java synchronized对象级别与类级别的同步锁
- java并发编程JUC第十二篇:AtomicInteger原子整型
- java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
- java并发编程JUC第十篇:CyclicBarrier线程同步
- java并发编程JUC第九篇:CountDownLatch线程同步
- java并发编程工具类JUC第八篇:ConcurrentHashMap
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
- java并发编程工具类JUC第六篇:SynchronousQueue同步队列
- java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列