Java 计算每个扑克起始手的唯一索引

Java 计算每个扑克起始手的唯一索引,java,indexing,combinatorics,lookup-tables,poker,Java,Indexing,Combinatorics,Lookup Tables,Poker,由于一副牌中有52张牌,我们知道有52选择2=1326不同的配对,但是在预扣扑克中,这可以扣成169个不同的牌,例如AK offsuit和AK fitted,因为无论是红心K红心还是黑桃K黑桃,预扣都没有区别。我的问题是,是否有一个很好的数学性质,我可以唯一地索引这169只手中的每一只(最好是从0到168)。我正在尝试创建一个查找表作为double[][]=new double[169][169],但无法将手表示形式(如AKs(王牌和王牌)更改为此数组中的唯一索引 如果这两张牌是同一套牌,则对这

由于一副牌中有52张牌,我们知道有
52选择2=1326
不同的配对,但是在预扣扑克中,这可以扣成169个不同的牌,例如AK offsuit和AK fitted,因为无论是红心K红心还是黑桃K黑桃,预扣都没有区别。我的问题是,是否有一个很好的数学性质,我可以唯一地索引这169只手中的每一只(最好是从0到168)。我正在尝试创建一个查找表作为
double[][]=new double[169][169]
,但无法将手表示形式(如AKs(王牌和王牌)更改为此数组中的唯一索引

  • 如果这两张牌是同一套牌,则对这两张牌进行排序,使较低的牌排在第一位。如果两张牌的花色不同,请对这两张牌进行排序,使较低的牌排在最后。当卡牌的等级和花色相同时,将保留一个特殊情况。
  • 为每个等级分配一个从0到12的值,并使用基数为13的计数系统。此系统中的最高值为12*13+12=168。
  • 最后,如果两张牌的等级和花色相同,则取等级值并加169。这些案例的范围为169-181。
  • 也许我的数学错了,但我想出了182张不同的卡片。我不是这个游戏的专家,所以我可能错过了什么。

    是的

    我们可以找到一个现成的Objective-C(和Java)Texas Hold'em 7卡和5卡评估器示例,并对其进行进一步解释。它将手“相加”以生成一个索引,该索引充分描述手的特征,用于确定排名


    欢迎使用其中的电子邮件地址提供所有反馈。

    听起来非常正确,我们永远不会有两张相同的卡片(因为标准卡片组中每个卡片只有一张),让0-9代表0-9,a=10,B=11,C=12。那是我们的数字。在base-13中,可以使用B3,将其转换为十进制,即B(即11)乘以13+3或146。这有意义吗?哦,你的答案是没有两张相同的卡片,现在你解释清楚了(我可以扮演无辜者,并声称我是在扮演多副牌,但我根本没有考虑清楚。)我很乐意。这是一个有趣的小练习。两张相同等级和套装的牌?这是不可能的,除非你在玩多副牌。如果你的查找表要比较两个不同的起始牌,请注意,套牌确实很重要-例如,
    KhQh
    vs
    AsTc
    的几率不同于
    KhQh
    vs
    AhTc
    ,即使两者都是
    KQs
    vs
    ATo