# -*- coding: utf-8 -*-'''
计算斗地主一手牌的所有可能组合数原创算法
'''#计算Cn x  组合数
def get_combinations(n , x) :t1 = n - x if t1 < x :x = t1if x == 0 :return 1if x == 1 :return ntmp1 = 1tmp2 = 1for i in range(0 , x ) :tmp1 *= (n - i)tmp2 *= (i+1)return tmp1 / tmp2#计算 x 张牌不含大小王的可能组合数
def func1( x ) :#a代表张数为1的扑克数  b .. 2   c .. 3   d .. 4result = 0l#a可能是0 到 13的任何数  因为扑克是A到K共13种for a in range(0 , 14) :sum1 = a#b可能是0 到 13的任何数  因为扑克是A到K共13种for b in range(0 , 14) :sum2 = sum1 + b#单张与对子必须是不同的,相加不能超过13 if sum2 > 13 :breakfor c in range(0 , 14) :sum3 = sum2 + c#单张与对子与三条必须是不同的,相加不能超过13if sum3 > 13 :breakfor d in range(0 , 14) :sum4 = sum3 + d #单张与对子与三条与四条必须是不同的,相加不能超过13if sum4 > 13 :break#如果符合此约束,则此手牌成立 , x为总张数if a + 2*b + 3*c + 4*d == x :'''print '-------------'print aprint bprint cprint d'''#组合分配 单牌是 C13 a种可能性  对子是 C(13-a) b 种可能性  。。。。。。。#单 * 对 * 三 * 四 = 此情况下总组合数 , 将其累加到总组合数中result += get_combinations(13 , a ) * get_combinations(13 - a , b)\* get_combinations(13 - a - b , c) * get_combinations(13 - a - b - c , d)return result#农民17张牌的总可能性   无王 + 2*单王 + 双王
result = func1( 17 ) + 2 * func1( 16 ) + func1( 15 )
print result
#58684015#地主20张牌的总可能性   无王 + 2*单王 + 双王
result = func1( 20 ) + 2 * func1( 19 ) + func1( 18 )
print result
#153009740

斗地主农民手牌的58684015种可能性相关推荐

  1. DFS+DP搜索斗地主玩家手牌最少出牌次数

    最近在做一个炸弹斗地主的项目,需要搭建一个离线牌库,筛牌就成为了重点.其实别的部门有这块的功能代码,但是时间充裕,自己做做,效率不行的话,再想办法拿人家的代码吧... 与普通斗地主的出牌规则一致: 牌 ...

  2. Python 三人斗地主手牌生成

    #三人斗地主手牌生成 import randomlst = list(range(2,11))+['J','Q','K','A'] colors = ['♥', '♦', '♣', '♠'] joke ...

  3. 斗地主手牌最少手数的搜索

    基本思路: 1) 先确定火箭:判断是否有大小王.  2) 再确定炸弹:判明是否有四头.          3) 再确定三条和三顺:在已经确定的三条中判断是否包含相邻的三条,如果有,则将其组成三顺.注意 ...

  4. 斗地主手牌(水贴ψ(*`ー´)ψ)

    扑克牌 斗地主手牌 斗地主手牌 代码实现: //创建一副牌 ArrayList<String> list = new ArrayList<>();String[] colors ...

  5. 斗地主发牌器,并对玩家手牌进行从大到小的排序C++

    因为我想要按照斗地主的规则对用户手牌进行排序,我直接用一个string数组hand[]来储存所有的牌,并从大到小排序,接下来我只需要保存每一个用户所拥有的hand数组的下标,并将下标由大到小排序,输出 ...

  6. 斗地主自动出牌函数c语言,斗地主AI出牌(示例代码)

    斗地主游戏的初期版本目前为止大概已经完成的一半了... 还剩下最麻烦的部分(AI)没写,写这篇博文主要是想理一下基本的思路,然后把这一部分也搞完. 先上一个目前的进度截图纪念一下好了 经过较长时间的冥 ...

  7. java斗地主怎么出牌_斗地主滑动选牌出牌(Cocos Creator)

    本文主要讲解以下几个方面: card model 滑动处理 阴影 选择 出牌 Card Model 首先,牌有两个属性:数字.花型: ps:本文现在是,用数字和花型来组成一张牌,有空可以再用另一种形式 ...

  8. 【Unity】用Lerp()实现类杀戮尖塔手牌变化

    Lerp的种类 math类里的Lerp函数可以对很多种数据类型进行插值,这里主要用的是Vector3的,因为变换position.scale都要用 这里的难点是rotation,我试了用Quatern ...

  9. 斗地主滑动选牌出牌(Cocos Creator)

    转载自:https://www.jianshu.com/p/29883621184c 本文主要讲解以下几个方面: card model 滑动处理 阴影 选择 出牌 Card Model   首先,牌有 ...

最新文章

  1. java jar包搜索地址 and ADB 连接模拟器
  2. Scala编程入门---数组操作之数组转换
  3. 7、mysql中的表结构操作
  4. 数据结构分类概述【转载】
  5. A. Regular Bracket Sequences
  6. 关于thymeleaf 遍历 List<Map<String,Object>> 类型数据
  7. wmv怎么转换成视频mp4,详细步骤
  8. win7下配置python_win7如何配置Python环境变量
  9. c语言机器人跑三角形图形,一种三角形物件运输机器人的制作方法
  10. 微生物-肠道-脑轴:新的治疗机会
  11. 如何在vscode上调试php,如何用vscode进行单步调试
  12. 磨金石教育摄影技能干货分享|人物系列摄影作品欣赏
  13. 2022胺基化工艺题库及在线模拟考试
  14. springMVC + Dubbo + zooKeeper超详细 步骤
  15. 如何使用Outlook的在线内联翻译功能
  16. Html页脚声明,HTML创建与页脚和页眉和内容
  17. Linux下配置Popush——陈键
  18. c语言 如果 n 是素数,且 n+2 也是素数,则称为孪生素数.,算法竞赛入门经典: 第四章 函数与递归 4.3孪生素数...
  19. sql经典40题(上)
  20. tushare 之get_today_all修复接口完整code

热门文章

  1. 【Python爬虫系列教程 41-100】猫眼电影字体加密破解
  2. jpeg2000(j2k)图像编码解码:c++实现openjpeg内存流接口(memory stream)
  3. 微信小程序文字两边添加横线
  4. 信息安全-零信任技术-SDP是什么,SDP可以防御哪些安全威胁
  5. pytorch——VGG网络搭建
  6. ListView点击事件失效
  7. html基础之块元素、行内元素、行内块元素
  8. 知乎上40个有趣回复,很精辟!
  9. ROS踩坑之.msg文件未能转化为.h文件
  10. springboot - vue-element-admin 整合,修改原有的登录退出