题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
半成品,疯了
import re def solution(): def dfs(nums,exp): if not nums: return False if len(nums)==1: if nums[0]==24: return exp else: return False for i,a in enumerate(nums): for j,b in enumerate(nums): if i!=j: subnums = [] for k,c in enumerate(nums): if k!=i and k!=j: subnums.append(c) for k in range(4): temp = exp if i>j and k<2: continue if k==0: subnums.append(a+b) exp += '{}+{}%'.format(a,b) if k==1: subnums.append(a*b) exp += '{}*{}%'.format(a,b) if k==2: subnums.append(a-b) exp += '{}-{}%'.format(a,b) if k==3: if b!=0: subnums.append(a//b) exp += '{}/{}%'.format(a,b) else: continue if dfs(subnums,exp): return dfs(subnums,exp) subnums.pop() exp = temp return False nums = list(input().split()) copys = nums.copy() value = {'J':11,'Q':12,'K':13,'A':1} if 'joker' in nums: print('ERROR') return else: for i in range(len(nums)): if nums[i].isdigit(): nums[i] = int(nums[i]) else: nums[i] = value[nums[i]] maps2 = {'+'} if dfs(nums,''): exp = dfs(nums,'') cell = exp.strip('%').split('%') res = cell[-1] ws = re.split('[+]|[*]|[-]|[/]',res) if eval(cell[0])==eval(ws[0]): res = res.replace(ws[0],'({})'.format(cell[0])) elif eval(cell[0])==eval(ws[1]): res = res.replace(ws[1],'({})'.format(cell[0])) if eval(cell[1])==eval(ws[0]): res = res.replace(ws[0],'({})'.format(cell[1])) elif eval(cell[1])==eval(ws[1]): res = res.replace(ws[1],'({})'.format(cell[1])) if '13' in res: res = res.replace('13','K') if '12' in res: res = res.replace('12','Q') if '11' in res: res = res.replace('11','J') if '1' in res: res = res.replace('1','A') compare = ' '.join(re.split('[)]|[(]|[+]|[*]|[-]|[/]',res)).split() if compare!=copys: print('NONE') else: print(res) else: print('NONE') solution()