雷昂纳多·梅西 2021-07-02 11:01 采纳率: 75%
浏览 261
已采纳

Python7-25 用扑克牌计算24点 (25 分)

一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个且可以重复取。运算遵从一定优先级别,可加括号控制,最终使运算结果为 24。请输出一种解决方案的表达式,用括号表示运算优先。如果没有一种解决方案,则输出 -1 表示无解。

输入格式:
输入在一行中给出 4 个整数,每个整数取值在 [1, 13]。

输出格式:
输出任一种解决方案的表达式,用括号表示运算优先。如果没有解决方案,请输出 -1。

输入样例:
2 3 12 12
输出样例:
((3-2)12)+12
我的代码
a,b,c,d=map(int,input().split())
list1 = [a, b, c, d]
list2 = []
list3 = []
symbols = ["+", "-", "
", "/"]
class FindException(Exception):
pass
try:
for i in range(4):
one = list1[i]
list2 = list1[0:i] + list1[i + 1:]
for j in range(3):
two = list2[j]
list3 = list2[0:j] + list2[j + 1:]
for k in range(2):
three = list3[k]
four = (list3[0:k] + list3[k + 1:])[0]
for s1 in symbols:
for s2 in symbols:
for s3 in symbols:
express = "((one{0}two){1}three){2}four".format(s1, s2, s3)
if eval(express) == 24:
print("(({0}{1}{2}){3}{4}){5}{6} ".format(one, s1, two, s2, three, s3, four))
raise FindException
print("-1")
except FindException:
pass
输出的答案部分正确

  • 写回答

3条回答 默认 最新

  • 雷昂纳多·梅西 2021-07-02 13:02
    关注

    a,b,c,d=map(int,input().split())
    list1 = [a, b, c, d]
    list2 = []
    list3 = []
    symbols = ["+", "-", "*", "/"]
    class FindException(Exception):
        pass
    try:
        for i in range(4):
            one = list1[i]
            list2 = list1[0:i] + list1[i + 1:]
            for j in range(3):
                two = list2[j]
                list3 = list2[0:j] + list2[j + 1:]
                for k in range(2):
                    three = list3[k]
                    four = (list3[0:k] + list3[k + 1:])[0]
                    for s1 in symbols:
                        for s2 in symbols:
                            for s3 in symbols:
                                express = "((one{0}two){1}three){2}four".format(s1, s2, s3)
                                if eval(express) == 24:
                                    print("(({0}{1}{2}){3}{4}){5}{6} ".format(one, s1, two, s2, three, s3, four))
                                    raise FindException
        print("-1")
    except FindException:
        pass

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services