# 给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间, # 本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算 # 此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。 # 输入描述: # 读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。 # 输出描述: # 对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false import itertools def num_arrange(wait_num_list, num_used_list): if len(wait_num_list) == 1: # 跳出条件: 只剩一个元素时 # 打印当前结果 res.append(num_used_list + [wait_num_list[0]]) return # 依次挑选一个元素作为第1元素 for i, e in enumerate(wait_num_list): # 递归调用自身,同时传入当前的前缀字符串 num_arrange(wait_num_list[:i] + wait_num_list[i + 1:], num_used_list + [e]) def operate(a, b, symbol): if symbol == "+": return a+b elif symbol == "-": return a-b elif symbol == "*": return a*b elif symbol == "/": if abs(b) <= 10**(-6): return 10**6 else: return a/b def get_result(): for i in range(len(res)): for j in range(len(res_symbol)): temp = res[i] symbol = list(res_symbol[j]) symbol_a = list(set(itertools.permutations(symbol, 3))) for k in range(len(symbol_a)): temp2 = symbol_a[k] result = operate(temp[0], temp[1], temp2[0]) result = operate(result, temp[2], temp2[1]) result1 = operate(result, temp[3], temp2[2]) result01 = operate(temp[1], temp[2], temp2[1]) result02 = operate(temp[0], result01, temp2[0]) result2 = operate(result02, temp[3], temp2[2]) result11 = operate(temp[0], temp[1], temp2[0]) result12 = operate(temp[2], temp[3], temp2[2]) result3 = operate(result11, result12, temp2[1]) if result1 == result2 == result3: cal_result.append(result1) elif result1 == result2 or result2 == result3: cal_result.append(result1) cal_result.append(result3) elif result1 == result3: cal_result.append(result1) cal_result.append(result2) else: cal_result.append(result1) cal_result.append(result2) cal_result.append(result3) if result1 == 24 or result2 == 24 or result3 == 24: method = str(temp[0])+temp2[0]+str(temp[1])+temp2[1]+str(temp[2])+temp2[2]+str(temp[3]) print("calculate method: ", method) return True return False if __name__ == '__main__': num_list = [7, 2, 1, 10] res = [] num_arrange(num_list, []) symbol_list = ["+", "-", "*", "/"] res_symbol = list(itertools.combinations_with_replacement(symbol_list, 3)) cal_result = [] print(get_result())
笔试题(八):计算24点游戏
最新推荐文章于 2023-11-15 11:32:07 发布
该代码实现了一个解决24点游戏的算法,通过递归遍历所有可能的数字组合和运算符排列,检查是否能得到24。输入是四个1到10的整数,可以重复,运算符包括加、减、乘、实数除法,每个数字仅使用一次。程序会尝试所有可能的计算方法并返回是否能找到得到24的运算序列。
摘要由CSDN通过智能技术生成