题解 | #24点运算#
24点运算
http://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
运算速度不够,不过做对了
import itertools as it all_pic = 'A 2 3 4 5 6 7 8 9 10 J Q K' pic_list = all_pic.split() input_dict = {} for n, i in enumerate(pic_list): input_dict[i] = n + 1 op_list = list('+-*/') op_all = [] for i in it.product(op_list, repeat=3): op_all.append(list(i)) def get_js(a, input_rr): if not input_rr: return int(str(a).split('.')[0]) for i in input_rr: if i not in op_list: b = input_rr.pop(0) # 运算符 c = input_rr.pop(0) # 数字 d = str(eval(str(a) + str(b) + str(c))) if '.' in str(d): d = int(str(d).split('.')[0]) return get_js(d, input_rr) def get_rr(): if 'joker' in s&nbs***bsp;'JOKER' in s: return 'ERROR' res_list = [] for i in s: res_list.append(input_dict[i]) for i in it.permutations(res_list, 4): for x in op_all: res = list(map(str, list(i))) res.insert(1, x[0]) res.insert(3, x[1]) res.insert(5, x[2]) nn = get_js(res[0], res[1:]) if nn == 24: ii = [] for xi in res: if xi not in op_list: ii.append(pic_list[int(xi)-1]) else: ii.append(xi) return ''.join(ii) return 'NONE' while True: try: s = input().split() print(get_rr()) except EOFError: break