C++ 扑克手串组合移除

问题描述

跟注范围存储在这样的函数中,其中 KK+ 表示口袋对子 KK 和更好

const char* prw_preflop_ICMrange[] = { 
"AA+","KK+","KK+,AKs",}

我想写一个函数,从对手的范围中删除我自己持有的卡牌组合,例如:

我持有“Ac8d”,对手的范围是“KK+,AKs”,那么函数应该循环遍历他的跟注范围,并从 AA 中移除 3 个组合和从 AK 中移除 1 个组合。同样,它应该遍历所有 Ax 和 8x 手牌的可能性,并删除涉及 Ac 和 8d 的组合。 该函数应该返回一个整数和我对手的实际调用范围,例如:
(16 连击 - 4 连击)/(1326 连击 - 101 连击) = 0.0098 (他的 0.0121 跟注范围实际上由于弃牌而更窄)

你怎么能做到这样的事情?

解决方法

创建一个生成所有组合的函数,然后使用该函数用生成的值填充 std::vector<std::string> 的实例。

使用预先填充的向量作为返回组合计数的函数的输入。函数不应从列表中删除任何内容,只计算满足条件的出现次数,因为您对所有组合不感兴趣,而是对组合数量感兴趣。

如果你真的想要组合,函数应该构建一个新的向量并返回它,而不是从向量中删除值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...