当前位置: 首页 > news >正文

枚举法计算24点游戏

# 请在此处编写代码
# 24点游戏
import itertools# 计算24点游戏代码
def twentyfour(cards):"""(1)itertools.permutations(可迭代对象):通俗地讲,就是返回可迭代对象的所有数学全排列方式。itertools.permutations("1118") -> 即将数字1118进行全排列组合(2)itertools.product(*iterables, repeat=1)iterables是可迭代对象,repeat指定iterable重复几次返回一个或者多个iterables中的元素的笛卡尔积的元组即为product(list1, list2) 依次取出list1中的每1个元素,与list2中的每1个元素,组成元组,repeat即为元组中有几个元素,最多重复几次(3)"""for num in itertools.permutations(cards):#提取数字for ops in itertools.product("+-*/", repeat=3):#提取运算符# ({0}{4}{1}){5}({2}{6}{3}) - > 即在{0}{1}{2}{3}放上数字,{4}{5}{6}放上运算符号,只能放三个,四个数字中间只能放三个运算符# 带括号有8种方法#带括号的意思是三个运算符的优先运算组成方式有8类# 1. (ab)cdbsd1 = '({0}{4}{1}){5}{2}{6}{3}'.format(*num, *ops)# 2. a(bc)dbsd2 = '{0}{4}({1}{5}{2}){6}{3}'.format(*num, *ops)# 3. ab(cd)bsd3 = '{0}{4}{1}{5}({2}{6}{3})'.format(*num, *ops)# 4. (ab)(cd)bsd4 = '({0}{4}{1}){5}({2}{6}{3})'.format(*num, *ops)# 5. ((ab)c)dbsd5 = '(({0}{4}{1}){5}{2}){6}{3}'.format(*num, *ops)# 6.  (a(bc))dbsd6 = '({0}{4}({1}{5}{2})){6}{3}'.format(*num, *ops)# 7.  a((bc)d)bsd7 = '{0}{4}(({1}{5}{2}){6}{3})'.format(*num, *ops)# 8.  a(b(cd))bsd8 = '{0}{4}({1}{5}({2}{6}{3}))'.format(*num, *ops)# print([bsd1, bsd2, bsd3, bsd4, bsd5, bsd6, bsd7, bsd8])for bds in [bsd1, bsd2, bsd3, bsd4, bsd5, bsd6, bsd7, bsd8]:try:if abs(eval(bds) - 24.0) < 1e-20:return "24点结果 = "+bdsexcept ZeroDivisionError:  # 零除错误continuereturn "Not fond"cards = ['2484', '1126', '1127', '1128', '2484', '1111']
for card in cards:print(twentyfour(card))

总结:

1、了解了枚举算法注意事项

    ​在列举的过程中,既不能遗漏也不要重复。

2、明晰了枚举算法的核心

    ​itertools.permutations将输入的可迭代对象即四个数字进行所有可能的全排列;

for num in itertools.permutations(cards):#提取数字并排列

    ​itertools.product将设定好的List1即四个运算符中提取三个与repeat=3相对应;

for ops in itertools.product("+-*/", repeat=3):#提取运算符

    ​将提取的数字排列与运算符依次放入八种可能的优先运算方式中,如果可以满足24点游戏的规则那么输出结果,如果8种运算方式都无法成功得出结果那么就返回”not fond“。

3、学习了4个数字三个运算符的优先排列方式

    ​共有八种:

    ​(ab)cd、a(bc)d、ab(cd)、(ab)(cd)、((ab)c)d、(a(bc))d、a((bc)d)、a(b(cd))。

4、运算结果

输入数字248411261127112824841111
运算结果(2+4)*(8-4)((1+1)+2)*6(1+2)*(1+7)(1+(1*2))*8(2+4)*(8-4)not fond

http://www.lryc.cn/news/63452.html

相关文章:

  • @Cacheable注解
  • CentOS分区挂载 fdisk、parted方式解析
  • BuildKit
  • c++ 11标准模板(STL) std::vector (二)
  • Python 循环技巧
  • 【Java笔试强训 7】
  • 工作7年的程序员,明白了如何正确的“卷“
  • 数学建模——查数据
  • PAT A1019 General Palindromic Number
  • ChatGPT会颠覆SEO内容创作吗
  • Maven私服搭建
  • Ajax和Json综合案例
  • 【genius_platform软件平台开发】第九十四讲:int64_t的格式化问题(lld和PRId64)
  • 多模态之clip
  • Lombok常用注解
  • 加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考
  • 数字化工厂:虹科Vuzix AR眼镜在工业制造中的革新应用
  • 配置出接口方式的单服务器智能DNS
  • 数据结构初阶(栈和队列)
  • IDEA实用设置
  • 关联爆破-RSA分解
  • Netty内存管理--内存池PoolArena
  • RabbitMQ 发布订阅模式,routing路由模式,topic模式
  • 又一款可视化神器,开源了!
  • 干货 | 中科院心理所考研复试经验分享
  • Redis基础知识概述
  • 开心档之C++ 引用
  • 后台优化主要分为哪些?工作内容及流程是什么?
  • 二叉树及其遍历
  • java 版本企业电子招投标采购系统源码之登录页面