最先实现的就是算法的实现。

需求:碰杠胡  ,不能吃 ,不能听 ,仅仅能自摸胡,当中癞子能够做随意牌可是不能碰和杠。

写的时候还不会玩麻将,还是老板教的。^_^

最麻烦的是胡牌算法。之前搜到的都是不包括癞子正常的胡牌,用的是%3余2,当中余数2就是余的将的意思。

可是有癞子就不能这么用了。仅仅好自己写一个了。

一个有136张牌,万,饼,条,东西南北中发白34种牌。

有四个癞子是直接就胡牌的,最坏的情况是有3个癞子,可是假设遍历一遍不用逻辑推断就有34X34X34接近4万次.

想一下假设能胡牌,最坏的情况下是在最后一次推断能胡牌,那之前的近4万次的推断都是浪费的。

这里转变一下思维,就是有目的的按需所取成胡牌所须要的癞子个数,而不是盲目遍历再推断胡牌。

算法的正确性:假设想胡牌必定是三扑一将(正常胡牌)。当中扑指的是顺子或者三重牌(比方 一饼二饼三饼  或者东风东风东风)。将指的是两个重牌。

四种情况:

1.假如将在【万】里面那么【饼】【条】【风】(包括中发白)必定是整扑。

2.假如将在【饼】里面那么【万】【条】【风】(包括中发白)必定是整扑。

3.假如将在【条】里面那么【万】【饼】【风】(包括中发白)必定是整扑。

4.假如将在【风】里面(包括中发白)那么【万】【饼】【条】必定是整扑。

假如当前癞子的数目是curHunNum。

如今先获取【万】【饼】【条】【风】各自成为整扑所须要癞子的个数,假设是情况一。

needHunNum= 【饼】成为整扑须要癞子的个数+【条】成为整扑须要癞子的个数+【风】成为整扑须要癞子的个数;

假设hadHunNum = needHunNum - curHunNum; 假设hadHunNum<0 需求的比拥有的多  就不做推断。

否则就推断【万】中成为整扑一将须要的数目。

情况二三四依次类推。

转载于:https://www.cnblogs.com/gcczhongduan/p/4263633.html

癞子麻将胡牌算法实现相关推荐

  1. 癞子麻将胡牌以及听牌算法实现

    最先实现的就是算法的实现. 需求:碰杠胡  ,不能吃 ,不能听 ,只能自摸胡,其中癞子可以做任意牌但是不能碰和杠. 写的时候还不会玩麻将,还是老板教的.^_^ 最麻烦的是胡牌算法.之前搜到的都是不包含 ...

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

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

  3. 麻将 胡牌 算法(任意癞子)

    分享一个麻将胡牌算法,支持多癞子,自己对麻将胡牌的理解写的一套快速识别胡牌逻辑,核心逻辑500行代码,仅对同条万进行处理,字花牌不包含在内,易理解,1M次随机胡牌牌型大概3秒左右.原创分享,我的算法也 ...

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

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

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

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

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

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

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

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

  8. 包含癞子的麻将胡牌算法

    记录一下麻将的通用胡牌算法实现,只要满足M x ABC + N x DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成扑,则可胡牌. ...

  9. 麻将胡牌算法,带癞子

    貌似去年去面试一家公司,问了麻将的算法.虽然之前做过广东麻将,但是胡牌算法在服务端,就没有在意. 现在在网上搜了一些算法试了试 = =! 麻将普通的胡牌就是刻子+顺子+将.癞子可以充当任意一张牌. 参 ...

最新文章

  1. 计算机系统的基本功能,计算机系统的主要功能是什么
  2. 在Java程序设计中,设置环境变量path和classpath的作用分别是什么?
  3. linux检测网卡步骤,linux网卡检测命令
  4. 【数据结构与算法】之深入解析“串联所有单词的子串”的求解思路与算法示例
  5. BIC/ImageGP稳定性问题
  6. 信息学奥赛一本通(1032:大象喝水查)
  7. 文件压缩 Huffman编码 (java)
  8. JavaScript 中的string 方法
  9. python从文件中读取数据时出现错误_python-从文件中读取数据
  10. Repeater、GirdView、DataList通用的分页代码
  11. 聚合四方支付系统架构及所需配置
  12. 推荐几个Python+OpenCV实战项目
  13. webrtc 共享屏幕延时测试
  14. 华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办
  15. 私有云服务器和公有云服务器的区别你真的知道吗?
  16. iOS 全息备份研究
  17. Checking Table 设计模式 - 从概念、建模、设计到实现
  18. selenium PhantomJS Fiddler使用
  19. Win10显示器驱动程序无法启动
  20. 欧姆龙CP1H与力士乐VFC-x610变频器通讯程序

热门文章

  1. 关于jvm-java中init与clint区别
  2. C#:万能表单+ajax实现网站文章阅读次数限制,若达到限制次数,则需付费购买文章(单篇文章)
  3. Steam客户端终于对所有Linux用户可用了
  4. 【时间处理】python制作日历、判定日期是周几(2种方法) 、获取某年某月的日历数据、获取法定节假日
  5. 如何看待中科院自动化所的博士论文致谢?
  6. 计算机三级嵌入式第一套
  7. 用c语言求解ax2 bx c=0方程的根,用公式法求解一元二次方程ax
  8. maven 公用仓库_各种Maven公共仓库
  9. Python - 控制雷电模拟器(Dnconsole)
  10. 机器人界面调试问题记录