Python程序查找某些字母和大小为k的组合中获得字母'a'的概率


假设我们有一个包含n个不同英文字母的数组。我们还有一个值k。我们可以以均匀分布选择k个不同的索引(从1开始)。我们必须找到至少一个选定的k个索引包含字母'a'的概率。

因此,如果输入类似于letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] k = 2,则输出将为64.28%。组合例如(1, 2), (1, 3),共有28种组合,但其中一些例如(1,2), (1,3), (6,7)等18对包含'a',所以18/28 = 0.6428。

为了解决这个问题,我们将遵循以下步骤:

  • contain := 0
  • total := 0
  • 对于letters中每个包含k个元素的组合c,执行以下操作:
    • 如果c中存在"a",则:
      • contain := contain + 1
    • total := total + 1
  • 返回 contain/total

示例

让我们看看以下实现以获得更好的理解:

from itertools import combinations
def solve(letters, k):
   contain = 0
   total = 0

   for c in combinations(letters, k):
      if "a" in c:
         contain += 1
      total += 1
return contain/total

letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z']
k = 2
print(solve(letters, k))

输入

['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'], 2

输出

0

更新于: 2021年10月12日

388 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告