已知两个1~n之间的不同的数,甲知道两数之和,乙知道两数之积。
甲问乙:“你知道是哪两个数吗?”乙说:“不知道”;
乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”;
于是,乙说:“那我知道了”;
随后甲也说:“那我也知道了”;
这两个数是多少?

思路很暴力,把所有的组合先列出来,两个数且不相同共有29+28+27+...1种可能性也就是435种

然后用字典将结果装起来:a,b为两个数,名称就是元组形式的(a,b),内容为两者之和和两者之积

dic={(a,b):(a+b,a*b) for a in range(1,n+1) for b in range(a+1,n+1)}
#先列出所以可能
#dic的单位是key:(a,b)   value:(a+b,a*b)

甲和乙的对话,建模后可以直接理解为:已知两数之积/和,两数只有单解(对应甲乙说:“那我知道了”)或一定有多解(对应甲乙说:“我不知道”)

而只需要将不符合题意的组合删除,就能得到最终的解。

并定义一个函数,专门用来删除不符合题意的解

def pop(dic,is_product,is_single):#用来剔除多解或单解#参数二:是积还是和#参数三:是单解还是多解lis,lis2=list(zip(*dic.values()))[is_product],[]for j in lis:if (lis.count(j) == 1)==is_single:lis2.append(j)#如果总数为1,及没有多解#如果总是不为1,及有多解#然后把不符条件的放入lis2,准备删除dic={k:v for k,v in dic.items() if v[is_product] in lis2}#删除多解或删除单解return dic

分析题目:


#乙不知道是哪两个数,也就是有多解
#如果没有多解,乙肯定知道是哪两个
#所以删除积的单解
dic=pop(dic,True,False)#甲:"我也不知道"说明和有多解
#删除和的单解
dic=pop(dic,False,False)#乙说:"那我知道了"说明积只有一解
#删除积的多解
dic=pop(dic,True,True)#甲说:"那我也知道了"说明和只有一解
#删除和的多解
dic=pop(dic,False,True)

最终代码:

def pop(dic,is_product,is_single):lis,lis2=list(zip(*dic.values()))[is_product],[]for j in lis:if (lis.count(j) == 1)==is_single:lis2.append(j)dic={k:v for k,v in dic.items() if v[is_product] in lis2}return dic
n=30
dic={(a,b):(a+b,a*b) for a in range(1,n+1) for b in range(a+1,n+1)}
dic=pop(dic,True,False)
dic=pop(dic,False,False)
dic=pop(dic,True,True)
dic=pop(dic,False,True)
print(*dic.keys())

Python解甲乙猜数问题相关推荐

  1. Python案例:猜数游戏

    Python案例:猜数游戏 一.猜数游戏概述 Every programmer has a story about how they learned to write their first prog ...

  2. 采用python语言实现猜数游戏_用python实现猜数游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  3. 用Python做一个猜数游戏(入门)

    用Python做一个猜数游戏(入门) 目录: 用Python做一个猜数游戏(入门) 第一阶段: 第二阶段: 前言: 各位大佬大家好,我是夕阳样桑,由于最近时间有点紧,所以先做一个小程序.感谢大家的支持 ...

  4. 采用python语言实现猜数游戏_python实现猜数游戏

    本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 一.问题描述: 使用python开发一个猜数小游戏,程序随机产生0~1024之间的数字,用户输入猜测数字,程序告诉用户 ...

  5. python 基础简单猜数游戏

    4.1 python 猜数游戏 代码 import random number=random.randint(1,5) guess=int(input("请输入一个1-5之间的数字:&quo ...

  6. Python tkinter版猜数游戏

    程序启动后,首先需要启动一次游戏并设置数值范围和猜测次数,然后可以猜数并输入,程序会根据实际情况进行大小提示,退出程序时提示战绩,例如共玩几次和成功几次. import random import t ...

  7. python基础之猜数游戏

    例题一:猜数游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示"遗憾,太大了":小于预设的数,显示"遗憾,太小了",如此 ...

  8. 鬼谷子问题(庞孙猜数、甲乙猜数问题)Python代码实现

    鬼谷子问题 孙膑,庞涓都是鬼谷子的徒弟. 一天鬼谷子出了这道题目: 他从2到99中选出两个不同的整数,把积告诉孙,把和告诉庞. 庞说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么. ...

  9. 猜数字游戏python程序_Python猜数游戏,程序随机生成一个0-100的数,猜对后退出【实例源码】...

    Python猜数字游戏: 写程序,随机生成一个0~100之间的数用变量x绑定 循环让用户输入一个数用y绑定, 输出猜数字的结果 1. 如果y等于生成的数x,则提示"您猜对了", 打 ...

最新文章

  1. 漫画:毕昇 JDK,重现了 “活字印刷术” 的传奇
  2. php-curl小记
  3. EOS 源代码解读 (2)插件-插件模板
  4. python学习笔记(12)--程序设计方法学
  5. 智能导航短信告警的一个逻辑处理
  6. FreeRTOS互斥锁
  7. 深度linux运行卡顿,Deepin很卡怎么办?Deepin卡顿解决方法盘点
  8. java版hive的UDF(临时函数与永久函数)
  9. sql server死锁_如何使用扩展事件和SQL Server代理自动执行SQL Server死锁收集过程
  10. 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
  11. C语言 16进制转float
  12. 安装 tensorflow 环境
  13. 手机网速测试软件排行榜,手机测网速软件,几款测速软件推荐
  14. 【电力电子】【2019.12】工业用三相全SIC PWM整流器
  15. hdoj3085 / acwing177 Nightmare
  16. python字符串乘以2是什么意思_什么是字符串?(2)转义字符与运算符
  17. 定积分的性质——定积分的基本性质
  18. URAL 2037 Richness of binary words (回文子串,找规律)
  19. Python 大作业
  20. 参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题

热门文章

  1. c++第一课 输出“Hello word”
  2. 20170706总结
  3. iOS中CFUUIDRef,CFUUIDCreate声称唯一字符串
  4. DHU OJ | 索引
  5. 兄弟姐妹们,我终于上岸了,喜获蚂蚁offer,定级p7,万字长文带你走完面试全过程
  6. Qt插件:QPluginLoader
  7. 行业分析网站-网站分析软件-免费网站详细数据分析软件
  8. 整合资源对个人站长的重要性
  9. Python用turtle画爱心丘比特之剑
  10. 【文献阅读】VAQF: Fully Automatic Software-Hardware Co-Design Framework for Low-Bit Vision Transformer