我正在尝试为以下问题找到一个有效的解决方案:
术语:
排名: 1-13,其中11=Jack,12=Queen,13=King
套装: H=Hearts、C=Clubs、D=Diamonds、S=Spades
"WishCard":一张可以根据玩家的意愿佩戴任何等级/花色的牌,而不需要重复的牌。
给出2到7张牌,其中至少0到7张被定义为"WishCard",那么在特定的给定时间,玩家可能拥有的最佳牌组合是什么?
Examples:
Stage: Pre-Flop
Hand[4C,*] -> Hand[4C,4H] | Pair
Stage: Flop
Hand[4C,*], Shared[*,10H,5C] -> Hand[4C,10C], Shared[10D,10H,5C] | 10 Three of a kind
Stage: Turn
Hand[4C,*], Shared[*,10H,5C,1S] -> Hand[4C,1C], Shared[1D,10H,5C,1S] | Ace Three of a kind
Stage: River
Hand[4C,*], Shared[*,10H,5C,1S,6C] -> Hand[4C,8C], Shared[7C,10H,5C,1S,6C] | 4C-8C Straight Flush我感觉像是在用蛮力逼迫它,这将永远持续下去。有没有更快的计算方法?
发布于 2020-03-26 03:58:06
这取决于你所说的“蛮力强迫”是什么意思。但它是混乱的,因为有很多可能性和很多逻辑。
我会将其预处理成数据结构,然后编写函数来测试特定类型的手。然后,使用脑海中浮现的任何技巧,从最好到最差寻找每一种。
预处理的一个示例是构建卡类型/计数的散列。举个例子,在转弯的时候:
{4: 1, 10: 1, 4: 1, 5: 1, 1: 1, 14: 1, "*": 2}现在"*"出现2x的事实意味着我们需要另外2来得到4,或者1来得到3,或者没有来得到2。而不必分析这些"*"变成了哪张卡。您现在可以为4种类型、满屋、3种类型、2对和1对构建测试。
对于直道,您可以运行序列,跟踪您看到的最后几张5牌的数量。如果你在*的数量上有不足,那么你就是一个直线生。
对于刷新,您将在每次刷新时返回指针。
对于笔直的同花顺,你可以分析笔直的平手。
然后你只需要选择高的牌。
https://stackoverflow.com/questions/60854919
复制相似问题