栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

赋予五张扑克牌价值的算法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

赋予五张扑克牌价值的算法

有十种公认的扑克手:

9 - Royal flush8 - Straight flush (special case of royal flush, really)7 - Four of a kind6 - Full house5 - Flush4 - Straight3 - Three of a kind2 - Two pair1 - Pair0 - High card

如果您不算西装,那么只有13种可能的卡值。卡的值为:

2 - 03 - 14 - 25 - 36 - 47 - 58 - 69 - 710 - 8J - 9Q - 10K - 11A - 12

用手编码需要4位,而对卡进行编码需要4位。您可以用24位代码对整手进行编码。

皇家同花顺将是1001 1100 1011 1010 1001 1000(0x9CBA98)

7高的顺子是0100 0101 0100 0011 0010 0001(0x454321)

两对10s和5s(以及ace)将是0010 1000 1000 0011 0011 1100(0x28833C)

我认为您有逻辑,可以弄清楚您的手牌。这样,您可能已经编写了代码以从左到右的顺序排列卡。因此,皇家同花顺将被安排为[A,K,Q,J,10]。然后,您可以使用以下逻辑构造代表手的数字:

int handValue = HandType; (i.e. 0 for high card, 7 for Four of a kind, etc.)for each card    handValue = (handValue << 4) + cardValue  (i.e. 0 for 2, 9 for Jack, etc.)

结果将是每手牌的唯一值,并且您确定同花顺将总是击败直牌,而王牌最高的满屋子将击败7高的满屋子,依此类推。

标准化手

上面的算法取决于对扑克手进行归一化处理,首先是最重要的牌。因此,举例来说,这只手

[K,A,10,J,Q]
(都是相同的衣服)是皇家同花顺。归一化为
[A,K,Q,J,10]
。如果拿到了手
[10,Q,K,A,J]
,它也将被标准化为
[A,K,Q,J,10]
。手
[7,4,3,2,4]
是一对4。它将标准化为
[4,4,7,3,2]

如果不进行标准化,则很难为每只手创建一个唯一的整数值,并确保一对4总是胜过一对3。

幸运的是,整理手是弄清楚手是什么的一部分。您 可以
执行此操作而无需进行排序,但是对五个项目进行排序将花费很短的时间,并且使很多事情变得更加容易。它不仅使确定平直度变得容易,而且将普通卡组合在一起,从而使查找对,三重和四倍变得更容易。

对于直道,同花和高牌手,您所需要做的就是整理。对于其他订单,您必须进行第二次订购,并通过分组来订购。例如,一个满屋子将是

xxxyy
,一对将是
xxabc
,(带有
a
b
c
,并按顺序排列),依此类推。不管怎样,大部分工作都是为您完成的。您所要做的就是将散乱者移到最后。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号