首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >21点数学函数

21点数学函数
EN

Stack Overflow用户
提问于 2015-08-09 19:07:04
回答 1查看 1K关注 0票数 0

我试图写一个数学函数来计算获胜或失去球员的概率。

假设我们只玩一张牌(52张牌),第一个例子是这样的:

代码语言:javascript
复制
The player has `7 and 5`
Dealer has `6`

这里我需要计算如果玩家stands,什么是经销商获胜的可能性?

如果信用卡总价值为17 <= x <= 21,经销商可以获胜。

我可以用这样的代码来计算这个,但是对于6个甲板来说,这是非常低效的。

代码语言:javascript
复制
def subset_sum(numbers, target, target2, partial=[]):
    s = sum(partial)
    # check if the partial sum is equals to target
    if s >= target and s <= target2: 
         print partial
    if s >= target:
         return  # if we reach the number why bother to continue
    for i in range(len(numbers)):
        n = numbers[i]
        remaining = numbers[i+1:]
        subset_sum(remaining, target, target2, partial + [n])

我正在寻找一个数学函数,它计算概率并返回它。

代码语言:javascript
复制
def get_prob(deck, small_number, big_number):

return prob

在我们的例子中,经销商有6个,所以小数字将是17-6=11,大数字是21-6=15

5,6,7是直接使用的,所以我的甲板现在是这样的:

dec = [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]

有了这些数字,dealer has 6 so small number is 17-6 = 11 and 21-6 = 15

代码语言:javascript
复制
def get_prob(dec,11,15):

return prob

问题:卡片之和在11到15之间的概率是多少?

EN

回答 1

Stack Overflow用户

发布于 2015-08-09 19:46:30

正如我在my last answer to one of your Blackjack questions上发布的,对于您的特定设置来说,这在算法上并不是必要的,正如我在前面的问题中所理解的那样。

这是排列的简单应用。然而,由于无法预测在下一笔交易之后还会继续存在的可能性,因此计算出未来的距离是没有意义的,因为在任何深度下,玩家都无法影响结果。一次只计算一个概率,计算起来更简单。

如果你有甲板:

代码语言:javascript
复制
deck = [1,1,1,1,2,2,2,3,3...]

使用以下方法可以获得一个范围内的和的概率:

代码语言:javascript
复制
def get_prob(deck, minimum, maximum):
  counts = [deck.count(i) for i in range(14)]
  return sum(counts[minimum:maximum+1])/len(counts)

简单地说,这个函数,给定一副牌和一组可接受的卡值,将返回在这些阈值内画出一张卡的概率。

另外,如果最小值为11,例如,不计算aces,则不必使用此函数,因为无论何时都需要进行抽签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31907839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档