1.针对有胡牌后有多种牌型可搭配,筛选出其中番数最大的一种。

2.步骤:

a.筛选出所有AAA,ABC,AA的搭配。

b.组合所有可能性的搭配,并计算番数

3.部分代码

    /*** 筛选所有可能的刻字和顺子组合。** @param cards:1.去除了财神 2.已经被财神替代牌替代了。*/public static List<ArrayList<Integer>> filterAllKeziAndShunziCombo(int[] cards, int jokerNum, int jokerPos) {List<ArrayList<Integer>> tmpCompany = new ArrayList<ArrayList<Integer>>();// 有三个财神,先组合成一个刻字if (jokerNum >= 3) {ArrayList<Integer> tmp = new ArrayList<Integer>();tmp.add(-1);tmp.add(-1);tmp.add(-1);tmpCompany.add(tmp);}for (int i = 0; i < 34; i++) {/*** 刻字判断* 如果是财神,且财神数小于3,就不组合* 找出所有可以组成刻字的牌*/if (cards[i] >= 3 || cards[i] + jokerNum >= 3) {ArrayList<Integer> tmp1 = new ArrayList<Integer>();tmp1.add(cards[i] >= 1 ? i : -1);tmp1.add(cards[i] >= 2 ? i : -1);tmp1.add(cards[i] >= 3 ? i : -1);tmpCompany.add(tmp1);if (cards[i] >= 3 && jokerNum >= 1) {// 三张里抽两张配一个财神ArrayList<Integer> tmp2 = new ArrayList<Integer>();tmp2.add(i);tmp2.add(i);tmp2.add(-1);tmpCompany.add(tmp2);// 三张里抽一张配一个财神if (jokerNum >= 2) {ArrayList<Integer> tmp3 = new ArrayList<Integer>();tmp3.add(i);tmp3.add(-1);tmp3.add(-1);tmpCompany.add(tmp3);}}}/*** 顺子判断* 找出所有可以组成顺子的组合*/if (i < 27 && MjCommonUtils.GetCardValueByIndex(i) <= 7) {int shunziNum = cards[i] + cards[i + 1] + cards[i + 2];if (shunziNum == 0 || shunziNum + jokerNum < 3) {continue;}int[] sunziPerNum = {cards[i], cards[i + 1], cards[i + 2]};int tmpJokerNum = jokerNum;while (sunziPerNum[0] + sunziPerNum[1] + sunziPerNum[2] + tmpJokerNum >= 3) {ArrayList<Integer> tmp = new ArrayList<Integer>();for (int j = 0; j < 3; j++) {if (sunziPerNum[j] > 0) {sunziPerNum[j]--;tmp.add(i + j);} else {tmpJokerNum--;tmp.add(-1);}}// 要避免出现刻字的情况,如果财神用来两张或以上,肯定就不是顺子了if (jokerNum >= 1 && tmpJokerNum >= 0 && jokerNum == tmpJokerNum) {// 不带财神顺子tmpCompany.add(tmp);// 单张财神顺子for (int m = 0; m < 3; m++) {ArrayList<Integer> tmp1 = new ArrayList<Integer>();tmp1.addAll(tmp);tmp1.set(m, -1);tmpCompany.add(tmp1);}} else if (tmpJokerNum >= 0 && jokerNum - tmpJokerNum <= 1) {tmpCompany.add(tmp);} else {break;}}}}// 财神和替代牌还原for (int m = 0; m < tmpCompany.size(); m++) {for (int n = 0; n < tmpCompany.get(m).size(); n++) {if (tmpCompany.get(m).get(n) == -1) {tmpCompany.get(m).set(n, jokerPos);} else if (tmpCompany.get(m).get(n) == jokerPos) {tmpCompany.get(m).set(n, 33);}}}return tmpCompany;}

4.写的比较随意,希望思路能给你帮助。

麻将胡牌算番-台州麻将相关推荐

  1. C语言麻将递归,【算法SQL面试题】面试问题:麻将胡牌递归算… - 看准网

    麻将胡牌算法 运用递归思路,先找出两张一样的牌作将牌,然后在剩下的牌中找顺子和三个一样的牌,当剩余的牌数为0,则排定可以胡牌.目前只是四川麻将的赢牌番型,除去风牌的.可自行进行扩展.(万:11-19, ...

  2. 检测四川麻将是否胡牌算法的实现

    自己写了一个四川麻将胡牌的算法,加入有两组牌让你判定是否胡牌,就只是最简单的那种胡法,非常不完善. 其中 char *as1 = "1W1W2T2D3W3W5W5W7W7W8W8W9W9W& ...

  3. 麻将胡牌递归算法(lua)

    麻将胡牌算法 运用递归思路,先找出两张一样的牌作将牌,然后在剩下的牌中找顺子和三个一样的牌,当剩余的牌数为0,则排定可以胡牌.目前只是四川麻将的赢牌番型,除去风牌的.可自行进行扩展.(万:11-19, ...

  4. 麻将胡牌算法——C#

    这里只介绍普通的麻将胡牌算法,也就是7个对子或者 1个对子+3*N; N = 三个顺子或者三个一样的 ,其中字牌(东南西北中发白)不能算顺子. 首先对于每张牌 它有牌的的数字 1-9,牌的种类 (万条 ...

  5. 麻将胡牌算法(遍历+剪枝)

    麻将胡牌算法(遍历+剪枝) 简介 麻将胡牌算法及代码 1. 方法引入 2. 类型定义 2.1 牌定义 2.2 牌特征定义 3. 计算胡牌 3.1 检测十三幺牌型 3.2 检测七小对牌型 3.3 检测普 ...

  6. 可带癞子的通用麻将胡牌算法

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. 笔者前段时间做过一款地方麻将 ...

  7. 麻将胡牌算法 极速(速度接近理论极限)

    此麻将胡牌算法优点: 1.可处理多赖子牌(万能牌) 2.算法速度极快:1ms可大约计算1W+副手牌是否可胡(带赖子.0.08us左右),不带赖子的牌型更快.(最新版的算法速度感觉已很接近理论极限值) ...

  8. 麻将胡牌算法带癞子 python实现

    姐姐:你去帮我和闺蜜打麻将? 学霸哥哥:可是我不会打麻将呀! 姐姐:你不是学霸吗?我教你一个麻将公式,我闺蜜可是单身哟! 学霸哥哥:什么公式? 姐姐:麻将胡牌公式: AAA*M+ABC*N+BB,WM ...

  9. Unity3D 通用麻将胡牌算法

    https://blog.csdn.net/qq_38064109/article/details/78933589 正常的麻将胡牌方式为满足N * ABC + M *DDD +EE 的形式,及存在一 ...

最新文章

  1. mysql 比较大小 慢_MYSQL慢查询优化方法及优化原则
  2. poj 2063 Investment(01背包变形)
  3. 神经网络的参数迁移和共同本征态
  4. Eclipse中的checkstyle插件
  5. 关于linux LVM
  6. linux防火墙没看3306访问不,Linux配置防火墙,开启80端口、3306端口
  7. linux旧版本如何升级成新版本,Linux如何升级软件版本,
  8. httpRuntime 问题
  9. Django集成celery实战小项目
  10. 【Docker】05 容器数据卷
  11. 【雨林木风】装机人员常用软件工具盘Y6.5
  12. 黑客编程学习_1.黑客编程入门
  13. 河南省公安机关户政服务管理工作规范(试行)
  14. 对称加密与非对称加密算法
  15. 电脑仙人掌机器人作文_蜗牛、仙人掌、电脑、雪人、机器人、蚕宝宝、大象选三到四个词作文...
  16. Hibernate save()与persist()区别
  17. ERP、MES(作用、功能、部署、相关模块)
  18. java编一个求圆柱表面积_Java:输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积...
  19. 2020年国家高新技术企业认定再从严!
  20. win7旗舰版,KB4012212安装失败问题:

热门文章

  1. 数论 --- 质因数
  2. mysql group by和dis_mysql下distinct和group by区别对比
  3. 织梦html编辑器不见,dedecms更换为kindeditor编辑器后各类问题解决方法
  4. c# textBox中只能输入数字及ABCDEF六个大写字母,小写字母自动转换为大写字母
  5. VC++ socket编程实例
  6. 上市公司企业持续创新能力、创新可持续性(原始数据+计算代码+计算结果)(2008-2021年)
  7. 电子信息工程专业毕设选题大全
  8. 【计算机毕业设计】社区医疗服务系统
  9. Android Gradle flavor —— 打造不同风味的app
  10. fun在matlab里面啥意思_matlab 中.*和*有什么区别 matlab 中| || ~ 都是什么含义呢。谢谢~~...