给定13张牌,问加入1~9中的任意一张牌后,能否达成和牌(满足以下两个条件):
- 14张牌中有2张相同数字的牌,称为雀头。
- 除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)
思路:暴力删除即可,更优的做法是使用计数来实现逻辑删除
def dfs(A):
if len(A)==2 and A[0]==A[1]: return 1
for i in range(len(A)-4):
if A[i]==A[i+4]: #统一种类的牌不能超过4张
return 0
for i in range(len(A)-2):
# 刻子
t=A[i]
if t==A[i+2]:
B=A.copy()
B.remove(t)
B.remove(t)
B.remove(t)
if dfs(B): return 1
# 顺子
elif (t in A) and (t+1 in A) and (t+2 in A):
B=A.copy()
B.remove(t)
B.remove(t+1)
B.remove(t+2)
if dfs(B): return 1
return 0
A,ans=list(map(int, input().split())),[]
for i in range(1,10):
cards=A.copy()
cards.append(i)
cards.sort()
if dfs(cards): ans.append(i)
ans=' '.join(str(x) for x in sorted(ans)) if ans else '0'
print(ans)