为了回答该知乎问题(https://www.zhihu.com/question/57408133/answer/152920354)而写就的程序。

6+德州扑克的规则,就是在传统52张牌德州扑克的基础上,去掉了2到5,只留下6到A共计36张牌;另外最小的顺子就成了A6789。此外,牌型大小变成了:同花>葫芦>三条>顺子。其他规则都不变。

新的概率表(根据本程序跑出的结果)变为:

Chrome浏览器按F12打开控制台,把下面代码贴进去,回车,等待几十秒,即可出结果。欢迎大牛来做代码正确性审核。

function isPair(cards) {for (var i = 0; i < cards.length - 1; i++) {if (cards[i][0] == cards[i + 1][0]) return true;}return false;
}function isTwoPair(cards) {var hasPair = false;for (var i = 0; i < cards.length - 1; i++) {if (cards[i][0] == cards[i + 1][0]) {if (hasPair) return true;i++;hasPair = true;}}return false;
}function isSet(cards) {for (var i = 0; i < cards.length - 2; i++) {if (cards[i][0] == cards[i + 1][0] && cards[i][0] == cards[i + 2][0]) return true;}return false;
}function isFourOfAKind(cards) {for (var i = 0; i < cards.length - 3; i++) {if (cards[i][0] == cards[i + 1][0] && cards[i][0] == cards[i + 2][0]&& cards[i][0] == cards[i + 3][0]) return true;}return false;
}function isFullHouse(cards) {for (var i = 0; i < cards.length - 2; i++) {if (cards[i][0] == cards[i + 1][0] && cards[i][0] == cards[i + 2][0]) {//is set, find another pairfor (var j = 0; j < cards.length - 1; j++) {if (cards[i][0] == cards[j][0]) continue;if (cards[j][0] == cards[j + 1][0]) return true;}}}return false;
}function isStraight(cards) {var index = 0;var result = [cards[index]];while (index < cards.length && result.length < 5) {var next = index + 1;while (next < cards.length && cards[index][0] == cards[next][0]) next++;if (next >= cards.length) return false;if (cards[index][0] + 1 == cards[next][0]) {result.push(cards[next]);if (result[0][0] == 6 && result.length == 4) {//额外处理6、7、8、9、A的顺子                var hasA = false;var i = 0;for (i = 0; i < cards.length; i++)if (cards[i][0] == 14) {hasA = true;break;}if (hasA) result.push(cards[i]);}} else {result = [cards[next]];}index = next;}return result.length >= 5;
}function isFlush(cards) {var colors = [0, 0, 0, 0];for (var i = 0; i < cards.length; i++) {colors[cards[i][1]]++;}for (var j = 0; j < 4; j++) {if (colors[j] >= 5) return true;}return false;
}function isStraightFlush(cards) {//先找出同花的颜色var colors = [0, 0, 0, 0];for (var i = 0; i < cards.length; i++) {colors[cards[i][1]]++;}var flushColor = -1;for (var j = 0; j < 4; j++) {if (colors[j] >= 5) {flushColor = j;break;}}if (flushColor == -1) return false;var flushCards = [];for (var i = 0; i < cards.length; i++) {if (cards[i][1] == flushColor) {flushCards.push(cards[i]);}}//再根据这个花色找同花顺for (var i = 0; i < flushCards.length - 4; i++) {if (flushCards[i][0] + 1 == flushCards[i + 1][0]&& flushCards[i + 1][0] + 1 == flushCards[i + 2][0]&& flushCards[i + 2][0] + 1 == flushCards[i + 3][0]) {if (flushCards[i + 3][0] + 1 == flushCards[i + 4][0]) return true;//额外处理6、7、8、9、A的顺子if (flushCards[i][0] == 6 && flushCards[flushCards.length - 1][0] == 14) {return true;}}}return false;
}function isRoyalFlush(cards) {//先找出同花的颜色var colors = [0, 0, 0, 0];for (var i = 0; i < cards.length; i++) {colors[cards[i][1]]++;}var flushColor = -1;for (var j = 0; j < 4; j++) {if (colors[j] >= 5) {flushColor = j;break;}}if (flushColor == -1) return false;var flushCards = [];for (var i = 0; i < cards.length; i++) {if (cards[i][1] == flushColor) {flushCards.push(cards[i]);}}//再根据这个花色找皇家同花顺for (var i = 0; i < flushCards.length - 4; i++) {if (flushCards[i][0] == 10&& flushCards[i][0] + 1 == flushCards[i + 1][0]&& flushCards[i + 1][0] + 1 == flushCards[i + 2][0]&& flushCards[i + 2][0] + 1 == flushCards[i + 3][0]&& flushCards[i + 3][0] + 1 == flushCards[i + 4][0]) return true;}return false;
}/*** 从0开始递增,序号依次对应,皇家同花顺>同花顺>四条>同花>葫芦>三条>顺子>两对>一对>高牌*/
function checkType(cards) {if (isRoyalFlush(cards)) return 0;if (isStraightFlush(cards)) return 1;if (isFourOfAKind(cards)) return 2;if (isFlush(cards)) return 3;if (isFullHouse(cards)) return 4;if (isSet(cards)) return 5;if (isStraight(cards)) return 6;if (isTwoPair(cards)) return 7;if (isPair(cards)) return 8;return 9;
}/*** 生成6-A四种花色的所有牌,其中A代表14,四种花色分别是0到3*/
function getAllCard() {var cards = [];for (var i = 6; i <= 14; i++) {for (var j = 0; j < 4; j++) {temp = [i, j];cards.push(temp);}}return cards;
}//输出arr牌组中,取num张牌,各有几种牌型
function combine(arr, num) {var result = [];for (var i = 0; i <= 9; i++) {result.push(0);}(function f(t, a, n) {if (n == 0) {//此时t就是一个num张牌的组合var type = checkType(t);result[type]++;return;}for (var i = 0, l = a.length; i <= l - n; i++) {f(t.concat([a[i]]), a.slice(i + 1), n - 1);}})([], arr, num);return result;
}function printResult(result) {console.log("高牌:".concat(result[9]) +"\n对子:".concat(result[8]) +"\n两对:".concat(result[7]) +"\n顺子:".concat(result[6]) +"\n三条:".concat(result[5]) +"\n葫芦:".concat(result[4]) +"\n同花:".concat(result[3]) +"\n金刚:".concat(result[2]) +"\n同花顺:".concat(result[1]) +"\n皇家同花顺:".concat(result[0]))
}function main() {var card = getAllCard();var result = combine(card, 7);printResult(result);console.log(result);
}//-----------------------------
main();

计算6+德州扑克各个牌型的概率相关推荐

  1. java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...

    德州扑克中比较重要的一个算法就是计算牌面的得分,不仅仅关乎概率计算的结果,同时也需要很高的性能.蒙特卡洛算法计算的次数越多结果越准确,因此算法的性能至关重要.下面是一个高性能的牌面java计算算法. ...

  2. 德州扑克比牌、认牌功能实现作业

    /*牌面数字使用:2 3 4 5 6 7 8 9 T J Q K A 花色:黑桃:B, 红桃:R, 棉花:M, 方块:F 一手牌就是: B2M2R3RJRK (一张黑桃2,一张棉花2,一张红桃3,一张 ...

  3. 德州扑克多个玩家对局时赢牌牌型概率分布表、各种牌型的出现概率

    就题目而言,对局赢牌牌型概率分布,各种牌型的出现概率,以及同样一手牌在不同牌局中的牌力大小,是不同的概念.本文不纠结这些概念,而是直接实验,从结果来统计概率.(本文实验在linux下用C语言通过一定数 ...

  4. 德州扑克实践之二------判断牌型

    实践二------牌型判断 起始 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进 ...

  5. java不确定人数扑克牌发牌技巧_汪峰被曝系德州扑克高手 善于计算发牌概率(图)...

    汪峰为了"上头条" 已经跳出娱乐圈,奔向体育圈! 4月14日,2015中国扑克锦标赛将在南京举办.据赛事主办方介绍,"摇滚歌手"汪峰确认将参加开幕式及冠军慈善赛 ...

  6. 【吟风听云】推锅扑克牌型规则说明(端锅子牌型说明/扑克版牌九规则)

    #Y0101 浮生无事一朝轻,且吟尘风听闲云 --<吟风听云集>@CuPhoenix [阅前敬告] <吟风听云集>收录尘世闲闻,供君同赏 仅代表该内容可能存在的某一版本,不保证 ...

  7. 小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌、打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略。但是小明暂时不关心这一些,

    题目描述: 小明特别喜欢打扑克牌,除了喜欢斗地主和德州扑克之外,还喜欢一种叫桥牌的游戏,桥牌的具体规则相当复杂,有叫牌.打牌和计分三个阶段,还有不断变化的局况,局况可能影响叫牌打牌策略.但是小明暂时不 ...

  8. 翻牌游戏如何打乱牌面java_德州扑克:如何成为像毒王Tom Dwan一样的世界级选手?...

    众所周知,毒王Dwan是世界上最有名的高额桌现场牌手,他的牌风以松凶著称,很多玩家想学习他的打法却不得要领,今天来告诉大家如何成为Dwan一样的世界级选手. 1.在前位玩比较少的牌,在后位玩比较多的牌 ...

  9. 炸金花游戏功能的实现(发牌,计算牌型,比牌)——python2.7

    最近在尝试做一款棋牌类游戏项目,看到炸金花的玩法后,就自己先写出炸金花的基本功能实现,给那些python爱好者参考一下. 炸金花是民间非常流行的一种扑克牌玩法,它具有独特的比牌规则,玩家按照规则以手中 ...

最新文章

  1. 颜色空间转换 cvtColor()[OpenCV 笔记13]
  2. 20个Nginx Web服务器最佳安全实践
  3. 如何使用Swift获取App版本和内部版本号?
  4. python网络爬虫权威指南 豆瓣_福利分享:个人整理的Python书单,从基础到进阶...
  5. MAT之PSO:利用PSO+ω参数实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
  6. opengl加载显示3D模型Q3O类型文件
  7. 本科生一作发10篇SCI,我们硕博生情何以堪啊……
  8. 1.9 编程基础之顺序查找 08 白细胞计数 python
  9. 深度学习《变分自编码器》
  10. 理解Java - JDK动态代理原理
  11. charset参数 sqluldr2_sqluldr2.bin数据库导出工具
  12. c51单片机跑马灯汇编语言,单片机的跑马灯简单汇编程序
  13. 个人征信报告,OCR识别,OCR识别技术方案
  14. 玩转5G之--网络布线2 详细解说
  15. 基于python的单词查询
  16. 感应加热ZVS制作图解
  17. 如何在两台服务器之间传输文件
  18. 云服务器安卓虚拟机,云服务器安装安卓虚拟机
  19. 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
  20. Holy Grail 圣杯布局详解

热门文章

  1. 与英特尔分手后,苹果收获成功
  2. 【GaussDB精品课第3期】GaussDB(for openGauss)配套工具介绍
  3. Java Apache Commons Collection3.2.1 理解Transformer 接口
  4. ADNI-python实现批量nii和dcm文件转换为png图像
  5. 深度学习方法在负荷预测中的应用综述(论文阅读)
  6. 如何成为一个优秀的程序员?
  7. apache中配置404错误页的方法
  8. C语言:int型数据向char型数据的强制类型转换原理
  9. STM32之SPI和W25Q128
  10. 期末复习【计算机组成原理】