问题描述:在一副扑克牌去掉大小王后,随机抽取4张牌,对其进行四则运算(可带括号),寻找结果等于24的解法
解决方案:对牌的顺序、括号位置、可能的运算符穷举,直到找到解法
知识点:递归思想,python中排列组合、求笛卡尔积的函数
局限性:指数级时间复杂度,仅适合少量数据(牌的张数较少)
代码(python 3.7)
import random
import itertools
# 假定仅4张牌
def find24(cards):
# 可用的运算符
ops = ['+', '-', '*', '/']
print('计算牌:' + ','.join([str(i) for i in cards]))
# 所有计算符号的排列组合
opsSeq = [i for i in itertools.permutations(ops, 3)]
# 所有数字的排列组合
cardsSeq