鬼谷分数2-99,和给庞涓,积给孙膑. python 程序实现
2018-03-02 11:05
260 查看
一天,鬼谷子随意从2-99中选取了两个数。他把这两个数的和告诉了庞涓,把这两个数的乘积告诉了孙膑,但孙膑和庞涓彼此不知到对方得到的数。 第二天,庞涓很有自信的对孙膑说:虽然我不知到这两个数是什麽,但我知道你一定也不知道。 随后,孙膑说:那我知道了。 过一会儿,庞涓说:那我也知道了。 这两个数是多少?
程序解法 以python代码为例, jia为庞涓 ,yi为孙膑
list = []
he_dict = {}
ji_dict = {}
#创建所有分类,并计算 每一个he ji 对应的可能组合的个数
for i in range(2,98):
for j in range(i+1,99):
list.append([i,j])
he_dict[i+j] = he_dict.get(i+j,0) + 1
ji_dict[i*j] = ji_dict.get(i*j,0) + 1
## 甲不知道 说乙不知道 甲不知道则说明 对应的he的分类不唯一
#确认乙也不知道则说明 这个和所有的组合在积上不唯一。 相应的获取he不可能的数。确认和的范围
list_jia_not = set([x[0]+x[1] for x in list if ji_dict[x[0]*x[1]] == 1 or he_dict[x[0]+x[1]] == 1])
list_jia_in = set([x[0] + x[1] for x in list if x[0]+x[1] not in list_jia_not])
## 乙说知道 。 和的范围确认。和所有的分类组成的积为积可能的分类
list_yi_pro = set([x[0] * x[1] for x in list if x[0]+x[1] in list_jia_in])
## 由于乙知道。则积可能的分类组成的和 与 和的范围 交集为1
list_yi_in = set()
for ji in list_yi_pro:
in_jia_set = set([x[0]+x[1] for x in list if x[0]*x[1] == ji])
if len(in_jia_set&list_jia_in) == 1:
list_yi_in.add(ji)
## 甲知道 则和的范围内的的每一个和的分解,对应的积,与积的范围交集为1
find_jia_in = set()
for jia in list_jia_in:
in_yi_set = set([x[0]*x[1] for x in list if x[0]+x[1] == jia])
if len(in_yi_set&list_yi_in) == 1:
find_jia_in.add(jia)
## 和的范围和积的范围均确认,则原始问题确认
final_in = [x for x in list if x[0]+x[1] in find_jia_in and x[0]*x[1] in list_yi_in]
结果[4,13]
程序解法 以python代码为例, jia为庞涓 ,yi为孙膑
list = []
he_dict = {}
ji_dict = {}
#创建所有分类,并计算 每一个he ji 对应的可能组合的个数
for i in range(2,98):
for j in range(i+1,99):
list.append([i,j])
he_dict[i+j] = he_dict.get(i+j,0) + 1
ji_dict[i*j] = ji_dict.get(i*j,0) + 1
## 甲不知道 说乙不知道 甲不知道则说明 对应的he的分类不唯一
#确认乙也不知道则说明 这个和所有的组合在积上不唯一。 相应的获取he不可能的数。确认和的范围
list_jia_not = set([x[0]+x[1] for x in list if ji_dict[x[0]*x[1]] == 1 or he_dict[x[0]+x[1]] == 1])
list_jia_in = set([x[0] + x[1] for x in list if x[0]+x[1] not in list_jia_not])
## 乙说知道 。 和的范围确认。和所有的分类组成的积为积可能的分类
list_yi_pro = set([x[0] * x[1] for x in list if x[0]+x[1] in list_jia_in])
## 由于乙知道。则积可能的分类组成的和 与 和的范围 交集为1
list_yi_in = set()
for ji in list_yi_pro:
in_jia_set = set([x[0]+x[1] for x in list if x[0]*x[1] == ji])
if len(in_jia_set&list_jia_in) == 1:
list_yi_in.add(ji)
## 甲知道 则和的范围内的的每一个和的分解,对应的积,与积的范围交集为1
find_jia_in = set()
for jia in list_jia_in:
in_yi_set = set([x[0]*x[1] for x in list if x[0]+x[1] == jia])
if len(in_yi_set&list_yi_in) == 1:
find_jia_in.add(jia)
## 和的范围和积的范围均确认,则原始问题确认
final_in = [x for x in list if x[0]+x[1] in find_jia_in and x[0]*x[1] in list_yi_in]
结果[4,13]
相关文章推荐
- 简单的python程序实现99乘法口诀表
- 单位怎么发年终奖才能合理避税,用Python程序实现
- python实现的重启关机程序实例
- Python小程序,99乘法表,长方形,三级菜单,购物,邮件,百钱买百鸡
- python实现支持并发、断点续传的Ftp程序
- 第九周实验报告任务3 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- Python实现的一个自动售饮料程序代码分享
- Python实现监控程序执行时间并将其写入日志的方法
- Python实现购物车购物小程序
- Python-----下载安装环境搭建以及初始化程序实现
- python实现颜色空间转换程序(Tkinter)
- python实现图片批量压缩程序
- python实现简单socket程序在两台电脑之间传输消息的方法
- Java程序9 X 9乘法表(补:第二种方法:递归算法实现99乘法表|再补:解析递归算法)
- python实现图片筛选程序
- 使用Python实现Hadoop MapReduce程序
- Python:程序最小化到托盘功能实现
- 实现URL编码解码的python程序
- 判断平面内一点和三角形位置关系的算法和python语言的程序实现