首页 > 试题广场 >

扑克牌四则运算

[编程题]扑克牌四则运算
  • 热度指数:1751 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
现在有一幅扑克牌,去掉大小王52张牌。随机选出4张牌,可以任意改变扑克牌的顺序,并填入 + - * / 四个运算符,不用考虑括号,除法按整数操作,计算过程中没有浮点数,问是否能够求值得到给定的数m。

输入描述:
一行四个数字 (JQK 分别被替换成11,12,13)单空格分割,另一行输入 m


输出描述:
可以输出1
否则输出0
示例1

输入

13 13 13 13 
24

输出

0

备注:
提示:
注意运算符优先级
""""
DFS 对扑克顺序深搜,每种选择夹带4种情况运算符
暴力枚举应该也可以,扑克顺序4*3*2*1,运算符4*4*4,
"""


def dfs(ss, a, vis, m, step):
    for i in range(len(a)):
        if not vis[i]:
            continue
        vis[i] = False
        s = ss + a[i]
        if step == 3:
            if eval(s) == m:
                return True
            else:
                vis[i] = True
                continue
        res = dfs(s + '+', a, vis, m, step + 1) or dfs(s + '-', a, vis, m, step + 1) or \
              dfs(s + '*', a, vis, m, step + 1) or dfs(s + '//', a, vis, m, step + 1)
        vis[i] = True
        if res: return True
    return False


if __name__ == "__main__":
    a = input().strip().split()
    m = int(input())
    vis = [True] * len(a)
    ans = dfs("", a, vis, m, 0)
    print(1 if ans else 0)

编辑于 2019-07-15 18:59:00 回复(0)