鬼谷子问题

孙膑,庞涓都是鬼谷子的徒弟。

一天鬼谷子出了这道题目:

他从2到99中选出两个不同的整数,把积告诉孙,把和告诉庞。

庞说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。

孙说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。

庞说:既然你这么说,我现在也知道这两个数字是什么了。

问这两个数字是什么?

Python代码解法如下(庞涓等于甲,孙膑等于乙):

from itertools import chainn,m = 2,99
print(f'随机选取的数字范围:{n}~{m}\n')#乙的角度用factor_combs表示
factor_combs = {}
for a in range(n,m+1):for b in range(n,m+1):if (a*b) in factor_combs:if (min(a,b),max(a,b)) not in factor_combs[a*b]:factor_combs[a*b].append((min(a,b),max(a,b)))else:factor_combs[a*b] = [(min(a,b),max(a,b))]
#甲跟乙说,我肯定你不知道A,B是什么
factor_combs = {product:combs for product,combs in factor_combs.items() if len(combs) > 1}
factor_combs_unique = set(chain(*factor_combs.values()))#甲的角度用addend_combs表示
addend_combs = {}
for a in range(n,m+1):for b in range(n,m+1):if (a+b) in addend_combs:if (min(a,b),max(a,b)) not in addend_combs[a+b]:addend_combs[a+b].append((min(a,b),max(a,b)))else:addend_combs[a+b] = [(min(a,b),max(a,b))]
#甲跟乙说,我肯定你不知道A,B是什么
addend_combs = {sum_:combs for sum_,combs in addend_combs.items() if all(comb in factor_combs_unique for comb in combs)}
addend_combs_unique = set(chain(*addend_combs.values()))
print(f'通过第一句话后现在双方都知道的数字可能的和为:\n{list(addend_combs.keys())}\n')#乙说,那我现在知道A,B是什么了
factors_bool = {product:[comb in addend_combs_unique for comb in combs] for product,combs in factor_combs.items()}
factor_combs = {product:combs for product,combs in factor_combs.items() if sum(factors_bool[product]) == 1}
factor_combs_unique = set(chain(*factor_combs.values()))
print(f'通过第二句话后现在双方都知道的数字可能的积为:\n{sorted(factor_combs.keys())}\n')#甲说,那我也知道了
addends_bool = {sum_:[_ in factor_combs_unique for _ in value] for sum_,value in addend_combs.items()}
addend_combs = {sum_:combs for sum_,combs in addend_combs.items() if sum(addends_bool[sum_]) == 1}
if addend_combs:sum_ = list(addend_combs.keys())[0]print(f'通过第三句话后确定两个数字的和只可能是:\n{sum_}\n')for ix,item in enumerate(addends_bool[sum_]):if item:print(f'结果是:\n{addend_combs[sum_][ix]}\n')
else:print('甲不可能有唯一结果')

鬼谷子问题(庞孙猜数、甲乙猜数问题)Python代码实现相关推荐

  1. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)

    #-*- coding: utf-8 -*-#!/usr/local/bin/python defis_prime2(number):'''判断数字是否是特殊质数(数学上质数和分解因子相同的数).分解 ...

  2. 2020 华数杯——脱贫帮扶绩效评价(Python代码实现)

  3. Python解甲乙猜数问题

    已知两个1~n之间的不同的数,甲知道两数之和,乙知道两数之积. 甲问乙:"你知道是哪两个数吗?"乙说:"不知道": 乙问甲:"你知道是哪两个数吗?&q ...

  4. 基于Java swing 和多线程开发一个猜拳游戏:有甲乙双方猜拳,投注其中一方,猜赢家,猜中即赢,猜错即输.

    1,系统简要说明:系统利用Java Swing创建窗口以及按钮,内置多线程实现玩家进行猜测之后,甲乙随机图片的转动,按停止按钮后停止图片的转动,并用Text文本框输出结果. 利用多线程以及生成随机数进 ...

  5. 笔试真题:100颗糖果,甲乙轮流从糖果盒中取出糖果,每次可取出2、4或6颗,若取得最后糖果的玩家为最终胜者,若甲先取z则(甲获胜,乙获胜,平局,不确定)

    笔试真题:100颗糖果,甲乙轮流从糖果盒中取出糖果,每次可取出2.4或6颗,若取得最后糖果的玩家为最终胜者,若甲先取z则(甲获胜,乙获胜,平局,不确定) 解析: 想让甲赢,只需保证最后剩8颗糖(乙取2 ...

  6. 甲乙两人轮流取火柴棒问题

    这种问题网上有很多版本,如下所示: 但是总根数和每次取走的数目可能不相同,甚至以后可能变幻题目,比如直接让你取数,只能取1或者2或者3,不过道理都是一样的,其实这道题我们在小学或者初中的时候就接触过, ...

  7. 渗透测试报告甲乙概述

    渗透测试报告封面样本 作用: 问题: 重要性: 渗透测试报告标准流程 渗透测试报告封面样本 渗透测试报告甲乙概述 素材均来源于网络,侵删

  8. C语言:甲乙丙三人放鞭炮,求鞭炮响声问题

    **问题描述:**甲.乙.丙三人同时放鞭炮,甲每隔A秒放一个,乙每隔B秒放一个,丙每隔C秒放一个,他们各自放D个,对任意给定的A.B.C.D,求能听到多少声炮响(多个鞭炮一起响算作一声) /*1.甲乙 ...

  9. 编程:随机生成1-100之间的数字,如果猜对了结束游戏,如果猜错则继续猜并提示所猜测的数字是大于还是小于所指定的数,最终提示猜对所用的次数。

    编程:随机生成1-100之间的数字,如果猜对了结束游戏,如果猜错则继续猜并提示所猜测的数字是大于还是小于所指定的数,最终提示猜对所用的次数. #include<stdio.h> #incl ...

最新文章

  1. 去年领了163亿薪资的马斯克,刚推出智能召唤功能就被吐槽:遇到人开的车就蒙圈...
  2. AI基础:一文看懂BERT
  3. 给SAP Spartacus开源项目提交代码时的注意事项
  4. CTF工具(1)--- ARCHPR--含安装/使用过程
  5. 【转】excel表格导出集锦repeater实用,和普通用法
  6. PAT乙类1013 数素数 (20 分)
  7. Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A
  8. websocket java8_Java API For WebSocket(八)服务器安全
  9. 搭建golang+vscode开发环境
  10. python threading之条件变量同步(condition)
  11. 240.搜索二维矩阵II
  12. MoosejawXRAY:让穿冬装的美女瞬间换上比基尼
  13. 交叉编译mpg123
  14. Qt开源作品16-通用无边框拖动拉伸
  15. 程序员生存定律--成长路上常见的坑(2)
  16. FX5U 结构体编程
  17. 靶机、软件搭建:05---Burp Suite工具的安装与使用(Windows环境)
  18. 华硕ROG冰刃5和枪神5有什么区别 哪个好
  19. Linux中报错segmentation fault
  20. 重磅出炉!中国高校人工智能专业综合排名榜单

热门文章

  1. 【已解决】VMware Vmware提示以独占方式锁定此配置文件失败 虚拟机开机黑屏
  2. 酸汤肥牛一一酸辣开胃 ,在家也能做出饭店味道
  3. 回归分析以及选择模型
  4. 小米路由器:路由器的外皮下到底是什么?
  5. 京东热2:约架是怎么变成约炮的
  6. python在哪些省份加入高考加分项目_Python将纳入高考?我们不妨从这几个方面分析下...
  7. 水表读数图解_水表怎么看?水表读数怎么看?水表怎么看图解?
  8. 2021年中国化学制品市场趋势报告、技术动态创新及2027年市场预测
  9. 127.0.0.1是回送地址,指本地机
  10. python mayavi_python下安装mayavi其实并不难