verybigstudent 2022-02-10 13:45 采纳率: 60%
浏览 216

python 计算问题

众所周知,数回惨败于九峰之前,叉同学还有一段黑历史:163点也玩不过九峰

163点的规则如下:从一副去掉大王小王的扑克牌中抽出六张,A,J,Q,K视为1,11,12,13,用这6张牌经过有理数的加减乘除运算(过程中可以出现分数)且每张牌都用到的情况下,如[9,9,9,7,4,7],可以发现(9+9+7)4+97=163或者(9+9+4+9/7)*7=163

在多次163比试惨败于九峰后,叉同学决定写一个打表程序作弊,但是如果按照52张取6张的思维去枚举,方案有20358520种,考虑到花色不同但牌型相同的组合其实是一样的,所以实际上对于算163点来讲,不同性质的牌组会比\tbinom{52}{6}(
6
52

)小很多,但叉哥的数学水平实在垃圾,并不会算去重后的这个数字。

你可以帮他算出来吗?
输入描述:
本题无输入
输出描述:
输出一个数字表示方案数

  • 写回答

3条回答 默认 最新

  • 侯小啾 Python领域优质创作者 2022-02-11 01:16
    关注

    这个简单。

    import random
    import itertools
    # 一副牌 不带大小王
    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
    # 抽六张牌放list2里边 可重复抽取
    list2 = random.sample(list1, 6)
    # 六张排列组合,并去掉重复的组合
    list3 = list(set(list(itertools.permutations(list2, 6))))
    # 六个数要运算五次
    list4 = ['+', '-', '*', '/'] * 5
    # 抽取5个运算符号排列组合,并去重
    list5 = list(set(list(itertools.permutations(list4, 5))))
    
    
    n = 0
    for i in list3:
        a = i[0]
        for j in list5:
            for k in range(5):
                if j[k] == '+':
                    a += i[k + 1]
                elif j[k] == '-':
                    a -= i[k + 1]
                elif j[k] == '*':
                    a *= i[k + 1]
                elif j[k] == '/':
                    a /= i[k + 1]
            if a == 163:
                n += 1
            a = i[0]
    
    # 输出总方案数
    print(n)
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月10日

悬赏问题

  • ¥15 cv2 morphologyEx函数报错
  • ¥15 有没有知道鸿蒙OS高级开发者新题答案的
  • ¥15 有没有人能帮我一下android
  • ¥20 做一个干部信息管理系统 软件
  • ¥15 通过4G模块EC600N向阿里云物联网平台物模型上面发送字符串,现在发送int数据是成功的,发送字符串就是不成功
  • ¥15 IDA反编译,代码识别失败
  • ¥70 matlab代码修改
  • ¥15 有没有下面符合以下条件的电子时钟的代码
  • ¥15 LMV844QMAX/NOPB(IS)问题判定
  • ¥15 主成分分析中的原始数据矩阵行列分别代表什么