有四张扑克牌,每张为2-A,10以上的J、Q、K、A按1算,加减任意顺序组合,能否算出24点。
例如
10、10、3、A,10+10+3+A=24,返回true
A、A、A、A,算不出24,返回false
1、4张牌最少要有3张相加才能等于24
2、加减任意那么有:A+B+C+D、-A+B+C+D、A-B+C+D、A+B-C+D、A+B+C-D 一共5种情况
def point24(string):
inp = string.replace("A", "1").replace("J", "1"). replace("Q", "1").replace("K", "1").rsplit("、")
k = ["%s+%s+%s+%s","-%s+%s+%s+%s","+%s-%s+%s+%s","+%s+%s-%s+%s","%s+%s+%s-%s"]
flag = False
for i in range(len(k)):
a = eval(k[i]%(inp[0],inp[1],inp[2],inp[3]))
if a == 24:
flag =True
break
return flag
if __name__ == ‘__main__‘:
#单元测试 覆盖
fn = point24
assert fn("10、10、3、A")
assert fn("10、10、10、10") is False
assert fn("6、10、10、10")
def point24_(string):
inp = string.replace("A", "1").replace("J", "1"). replace("Q", "1").replace("K", "1").rsplit("、")
inp = [int(i) for i in inp]
inp.sort()
inp.reverse()
s = 0
for i in range(len(inp)):
if s<24:
if (s +int(inp[i])) ==24:
return True
else:
s += int(inp[i])
elif (s - int(inp[i]))==24:
return True
else:
print(inp)
return False
if __name__ == ‘__main__‘:
#单元测试 覆盖
fn = point24_
assert fn("10、10、3、A")
assert fn("10、10、10、10") is False
assert fn("6、10、10、10")
原文:https://www.cnblogs.com/Klay/p/15003541.html