思路:
由于四则运算组合的可能性很多,而且不存在子问题模板化适配,所以 递归、分治、动态规划的方式不行,不要遇见难一点的题就条件反射到这些方法上。
本题是必须穷举的,也就是暴力法。
我们先评估下暴力求解时的问题规模:4个数字,3个运算符。由于不允许带括号,而且数字先后顺序不固定,所以对于数字位来说肯定是排序问题,一共4*3*2*1 = 24种排列,
另外对于运算符,每个位置都有4种取值可能,故是4^3 = 64种,所以整体的问题规模是 24*64 = 1536个计算组合。也就是给定4个数字,最极端的情况也就1536次四则运算,这个问题规模2s内完成。
这里用python的eval、笛卡尔积函数product跟生成排序序列的permutation函数,相比cpp/java 缩减代码行数。

运行时间:51ms            占用内存:3680k
import sys
import itertools

def calc_24points(data):
    map2={'J':'11','Q':'12','K':'13','A':'1'}
    new_data=[]
    for d in data:
        if d in map2:
            new_data.append(map2[d])
        else:
            new_data.append(d)

    map1={'0':'+','1':'-','2':'*','3':'/'}   
    for o in (''.join(x) for x in itertools.product(map(str,range(4)), repeat=3)):
        for i in itertools.permutations(range(4),4):
            temp1='(('+new_data[i[0]]+map1[o[0]]+new_data[i[1]]+')'+map1[o[1]]+new_data[i[2]]+')'+map1[o[2]]+new_data[i[3]]
            temp2=data[i[0]]+map1[o[0]]+data[i[1]]+map1[o[1]]+data[i[2]]+map1[o[2]]+data[i[3]]
            if ('joker' in temp1)&nbs***bsp;('JOKER' in temp1):
                print('ERROR')
                return
            elif eval(temp1)==24:
                    print(temp2)
                    return                 
    print('NONE')

for line in sys.stdin:
    data = list(map(str, line.strip().split()))
    calc_24points(data)