【发布时间】:2021-02-02 11:01:09
【问题描述】:
我正在尝试创建一个算法来计算滚动两个骰子加起来达到某个数字的相关概率。相关概率部分很好,但我试图找到所有可能的数字组合。一次掷两个骰子意味着你的数字范围是 2 到 12。我想找出一个双面骰子的所有不同组合,它们的总和会是一个目标数字。
例如,如果目标数是 8: 不同组合的数量如下: (2,6)(6,2)(5,3)(3,5)(4,4)(2,2,2,2)(3,3,2)(2,3,3)(3 ,2,3)
我可以创建的唯一代码来查找数字组合是以下代码:
source = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
targets = [25]
p = [[a for n in range(2, 13) for a in it.combinations(source, n) if sum(a) == t] for t in targets]
[dict(zip(targets, a)) for a in it.product(*p) if len(sum(a, tuple())) == len(set(sum(a, tuple())))]
print(p)
上面代码的问题是它没有显示所有不同的组合以不同的顺序和重复的数字组合。
例如,目标编号为 8: (2,6) 加起来八 但是上面的代码不包括其他组合(6,2)
另一个目标编号为 8 的示例: (4,4) 加起来是 8 个,但在上述代码的输出中不包括在内。
我的最终目标是算法能够找到更大数字的所有可能组合,例如25.我想知道是否有基于现有代码或新代码的解决方案可以解决上述问题。最好是使用 python 的解决方案,但是我对其他语言持开放态度。
【问题讨论】:
-
如果您在不替换单个单调递增序列的情况下进行组合,则无法获得 (x,x) 之类的东西,并且组合中的顺序无关紧要,因此您不会同时获得 (x ,y) 和 (y,x)。听起来您想要置换而不是组合的排列。或者从序列的 n 个副本中采样。
标签: python algorithm combinations