博客
关于我
24点游戏的暴力美学
阅读量:798 次
发布时间:2023-04-16

本文共 2007 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要找到一种方法来计算24点游戏,通过给定的四个扑克牌的数字组合,使用加减乘除运算得到24点。扑克牌的数字和特殊符号(如joker和JOKER)需要被正确转换,并且运算顺序必须严格按照从左到右的顺序进行,不考虑运算符的优先级。

方法思路

  • 输入处理:首先读取输入的四个牌,检查是否包含joker或JOKER,如果有,输出错误信息。
  • 数字转换:将每个牌转换为对应的数值,例如'A'转换为1,'J'转换为11等。
  • 排列组合生成:生成所有可能的四个数字的排列组合。
  • 运算符组合:对于每个排列,尝试所有可能的运算符组合(加减乘除)。
  • 运算顺序模拟:使用栈的方式模拟从左到右的运算顺序,逐步计算每一步的结果。
  • 结果检查:如果某个排列和运算符组合的结果等于24,输出对应的算式;如果所有可能性都尝试过仍未找到解,输出“NONE”。
  • 解决代码

    from itertools import permutations, productpoker_list = input().split()# 检查是否有joker或JOKERif any(card in ['joker', 'JOKER'] for card in poker_list):    print("ERROR")    exit()# 定义每个牌的权值poker_values = {    'A': 1,    '2': 2,    '3': 3,    '4': 4,    '5': 5,    '6': 6,    '7': 7,    '8': 8,    '9': 9,    '10': 10,    'J': 11,    'Q': 12,    'K': 13,    'joker': 2,    'JOKER': 10}# 转换为数值列表cards = [poker_values[card] for card in poker_list]def compute_order(a, op1, b, op2, c, op3, d):    stack = [a, b, c, d]    ops = [op1, op2, op3]    current = a    for i in range(len(ops)):        op = ops[i]        next_num = stack.pop()        if op == '+':            current += next_num        elif op == '-':            current -= next_num        elif op == '*':            current *= next_num        elif op == '/':            if next_num == 0:                return None  # 除以零,无法计算            current /= next_num    return current# 遍历所有排列组合for perm in permutations(cards):    for ops in product(['+', '-', '*', '/'], repeat=3):        a, b, c, d = perm        op1, op2, op3 = ops        result = compute_order(a, op1, b, op2, c, op3, d)        if result is not None and abs(result - 24) < 1e-9:            print(f"{a}{op1}{b}{op2}{c}{op3}{d}")            exit()print("NONE")

    代码解释

  • 输入处理:读取输入的四个牌,并检查是否包含joker或JOKER,输出错误信息并退出程序。
  • 数字转换:将每个牌转换为对应的数值,存储在列表中。
  • 排列组合生成:使用itertools.permutations生成所有可能的四个数字的排列组合。
  • 运算符组合:使用itertools.product生成所有可能的运算符组合(加减乘除)。
  • 运算顺序模拟:定义compute_order函数,使用栈的方式模拟从左到右的运算顺序,逐步计算每一步的结果。
  • 结果检查:对于每个排列和运算符组合,计算结果,判断是否等于24,输出对应的算式并退出程序;如果所有可能性都尝试过仍未找到解,输出“NONE”。
  • 这个方法通过生成所有可能的排列组合和运算符组合,结合严格的运算顺序模拟,确保能够找到所有可能的解法,从而正确解决24点问题。

    转载地址:http://kfgfk.baihongyu.com/

    你可能感兴趣的文章
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
    查看>>
    MySQL 8.0 恢复孤立文件每表ibd文件
    查看>>
    MySQL 8.0开始Group by不再排序
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    multi swiper bug solution
    查看>>
    MySQL Binlog 日志监听与 Spring 集成实战
    查看>>
    MySQL binlog三种模式
    查看>>
    multi-angle cosine and sines
    查看>>
    Mysql Can't connect to MySQL server
    查看>>
    mysql case when 乱码_Mysql CASE WHEN 用法
    查看>>
    Multicast1
    查看>>
    MySQL Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>