前言:

好早之前看到的一个逻辑题:有两个2到99之间的整数,a知道这两个数的和,b知道这两个数的积。

第一句:a对b说:我不知道这两个数是多少,但我确信你也不知道。

第二句:b说:我知道了。

第三句:a说:我也知道了。

问这两个数是多少? 题不难,只是手动去找没有python写程序找的快,而且用python程序可以在后面进行进一步的探索。

分析:

首先是a手上的数是两个数的和,那是在[4,198]之间。

第一句话分析:a确信b不知道这两个数

(1)

比如a手上的数字是8,那么要求的两个数字就有可能是(2,6),(3,5),(4,4)这三种情况,对应的b手上的数字就可能是12,15,16这三种情况,这是来自a的视角。

但简单分析,第一句话 a确信b不知道这两个数字是多少。那么b手上的数字肯定不可能是15,为什么呢?因为15只有一种分解情况(两个素数相乘):3*5。如果b手上是15,那么b肯定知道这两个数字是3和5了。

进而可以分析出 a 手上的数字肯定不是8, 因为a手上是8的话,那b手上可能的三种情况(12,15,16) 其中的15这种情况,b是可以分析出这两个数字分别是多少的,而a确信b不知道,所以可以排除8。

进一步,那a手上什么数字可以排除掉呢?通过上面的分析,

可以得出 结论(1):a是不能分解成两个素数的和,凡是可以分解成两个素数的和的情况,b是可以知道这两个数的

上python代码:

asum1里面存了a手上还可能的数,54个(排除了那些能分解成两个素数的数)

(2)

上面的54个可能里面全是奇数,没有偶数。

进一步分析:a 手上的数字也不能写成(53+2*x,x>=2)这种形式,因为如果可以分解成这种形式,b=53*2*x,因为两个数是小于等于99的,53*2>99了,也只有一种分解情况53,2*x,进而b也知道这两个数字了。

所以结论(2):比上限/2(99/2=49.5)大的第一个素数(53),+3(56)以后的数字就排除了。

为什么是+3,因为2*x最小是4.

所以经过第一句话后,a手上的数字asum2集合 还剩11个

[11, 17, 23, 27, 29, 35, 37, 41, 47, 51, 53]   <-asum2

把他们分解了,相乘得到b的粗略集合:

第二句话分析:b知道了

b在什么情况下可以说这样的话呢?

比如b =24, 那么可能的分解(2,12),(3,8),(4,6)两种情况,那么对于的 a就是14,11和10三种情况,这是来自b的视角。

刚开分析了那么多得出a手上剩下的可能性:[11, 17, 23, 27, 29, 35, 37, 41, 47, 51, 53],这个集合的意思是当a手上是这些数的时候a才敢说第一句话,反言之a手上不是这些数时a就不敢说这些话。

那么24分解出来得到的 14,11和10三种情况:14,10不在a可能集合里,11在可能集合里。

11是唯一一个在a可能集合里的,所以b可以分析出a手上的数字是11,因为如果是其他两个数的话,a不敢说第一句话。

进而得出一个结论:b分解出来的所有两个数eg:(2,12),(3,8),(4,6)所组成的和eg:14,11和10, 有且只有一个存在在a的可能集合里

经过第二句话b手上可能数字有102个,存入bmul1

第三句话分析:a知道了

和第二句话一模一样的分析,a为什么能知道?唯一的可能性就是a手上的数的分解后组成的积有且只有一种情况在集合bmul1里(第二句话算出的集合b)

现在就只有唯一一个结果了。

输出结果


原题到这里就结束了,后面可以展开一些思考。

(1)既然得出的结论是4和13,不算大,而条件给的是2-99,那么有没有可能把条件范围给小一点,比如给2-20来降低题目难度呢,毕竟这样计算量要小很多。程序里面可以直接把初始条件从99改成20,结果是没有找到符合要求的两个数。为什么呢?

原因是虽然4和13小于20,但a看到的是17,那么有可能分解成8和9,在a的视角b的数字有可能是72,同时在b的视角的可以分解成2*36,这个36就一下大于20了哦。

那么把题目换个有趣的问法,同样的对话,两个数字的范围是2-N,N至少取多大,才能保证至少有一个解?

用程序解很简单,让N从10到99进行一次遍历,看从哪次开始有解了就输出

得到的结论是:N至少是64才有一个解,(4,13)

(2) 那么把N扩大,范围扩大,解会变多吗

如果范围扩大到2-999了,有了第二个解4,61。大家可以思考一下为什么范围在2-99的时候没有出现这个解

范围扩大到2-9999了,算出来了13个解,分别是:

1 两个数和: 17 两个数积: 52

两个数为: [4, 13]

2 两个数和: 65 两个数积: 244

两个数为: [4, 61]

3 两个数和: 89 两个数积: 1168

两个数为: [16, 73]

4 两个数和: 127 两个数积: 1776

两个数为: [16, 111]

5 两个数和: 137 两个数积: 4672

两个数为: [64, 73]

6 两个数和: 163 两个数积: 4192

两个数为: [32, 131]

7 两个数和: 179 两个数积: 2608

两个数为: [16, 163]

8 两个数和: 185 两个数积: 724

两个数为: [4, 181]

9 两个数和: 191 两个数积: 8128

两个数为: [64, 127]

10 两个数和: 233 两个数积: 916

两个数为: [4, 229]

11 两个数和: 247 两个数积: 1912

两个数为: [8, 239]

12 两个数和: 343 两个数积: 9952

两个数为: [32, 311]

13 两个数和: 373 两个数积: 19776

两个数为: [64, 309]

一道经典面试逻辑题的python解法相关推荐

  1. LeetCode 148. Sort List--面试算法题--C++,Python解法

    LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...

  2. 运维经典面试真题汇总系列

    运维经典面试真题汇总系列 如何判断 mysql 主从是否同步?该如何使其同步?** Slave_IO_Running Slave_SQL_Running: 略 2. mysql 的 innodb 如何 ...

  3. 全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第1-60题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再保证, ...

  4. 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第101-160题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再 ...

  5. 全新整理 微软 谷歌 百度等公司经典面试100题 第101 160题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 全新整理 ...

  6. 微软、谷歌、百度等公司经典面试100题[第101-160题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第101-160题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再 ...

  7. 互联网运营面试题_一道经典面试:你认为互联网运营是做什么的?

    成长之"道"写得差不多了,从这篇开始以后多写写"术".今天的主题是一道经典面试:你觉得互联网运营是做什么的? 相信不少读者都遇到过类似的问题,比如你觉得游戏运营 ...

  8. 一道小学奥数题的编程解法

    一道小学奥数题的编程解法 这是一道小学奥数题,看到这一题后如果只给我笔和纸,我真的无从下手,不知怎么去把这些方框填出来.但借助编程,这道题就非常简单了.直接送上代码. C++程序代码 #include ...

  9. 硬件经典面试 100 题

    硬件经典面试 100 题(附参考答案) 1. 请列举您知道的电阻.电容.电感品牌(最好包括国内.国外品牌). 电阻: 美国: AVX. VISHAY 威世 日本: KOA 兴亚. Kyocera 京瓷 ...

最新文章

  1. 《SQL入门经典》学习笔记
  2. python3 hmac算法简介
  3. 解决mysqlslap执行命令报错(BEGIN failed--compilation aborted at //bin/mysqlslap line 2098)usr...
  4. Android --- Bundle实现数据的读取
  5. ofdm原理_什么是IQ调制,了解I/Q调制的基本原理及其主要特征 - 射频技术第2部分...
  6. servlet下根据相对路径找资源
  7. 电机转速模糊pid控制
  8. 六道腾讯、百度、美团常爱问的面试智力题和答案
  9. 【软件工具】之录屏软件 Captura
  10. 何小鹏快跑:身家暴涨50亿美元,他还愿坐经济舱吗?
  11. 1月到12月 周一到周日 十二种颜色 用英语怎么说
  12. 美国乡村音乐历史[[[磁性的声音-成熟男人的味道-John Michael Montgomery]]]
  13. 热模块替换/热更新 HMR
  14. 神经网络与深度学习三:编写单隐层神经网络
  15. bash文件无法运行,提示没有那个文件或目录的解决方法
  16. 二手车价格预测实战(一)——数据探索
  17. 用一个易拉罐将家里的WiFi信号增强一倍
  18. 罗永浩重返科技圈,却故人难寻
  19. 一起学习用Verilog在FPGA上实现CNN----(三)激活层设计
  20. SVD matlab图像处理

热门文章

  1. angel arena reborn 装备合成说明
  2. 语音合成工具_bark
  3. 【upc】 跳方格 (lattice) | 差分、思维、dp
  4. Sql server 13位时间戳转换日期格式
  5. 小米八android耗电比例很大,手机技巧 篇一:小米新系统推送,耗电严重待解决!教你5招实现三天一充...
  6. android手机卡怎么办,安卓手机变卡怎么办?值得收藏
  7. 自媒体人必备的4大工具,全部免费,快收藏起来
  8. 算法之路--朴素叶贝斯(七)
  9. 本地化Jonas的管理webapp
  10. 机器学习2017年重大进展汇总