我想列举 N 个球在 A 个盒子中的所有可能组合。
例子: 我有 8 个球要放在 3 个盒子里:
box_1 box_2 box_3
case-1 8 0 0
case-2 0 8 0
case-3 0 0 8
case-4 7 1 0
case-5 7 0 1
case-6 6 2 0
...
我的第一个问题是我需要 A 循环来执行此操作,但我想要那个 A 和 < strong>N 是用户的输入。那么,如果不编写用户可能需要的所有可能数量的循环怎么办?
a 和 N 的值介于 2 和 ~800 之间,因此对计算时间如此。如何优化该算法?
如果你用python语言回答我,我将不胜感激。 感谢所有贡献!
最佳答案
这从 python 2.6 开始工作得很好,(2.5-friendly implementation of itertools.permutations
is available as well):
>>> import itertools
>>> boxes = 3
>>> balls = 8
>>> rng = list(range(balls + 1)) * boxes
>>> set(i for i in itertools.permutations(rng, boxes) if sum(i) == balls)
{(0, 1, 7), (3, 1, 4), (0, 4, 4), (1, 0, 7), (4, 0, 4), (3, 0, 5), (1, 2, 5), (1, 7, 0), (0, 8, 0), (1, 4, 3), (6, 0, 2), (4, 3, 1), (3, 3, 2), (0, 5, 3), (5, 3, 0), (5, 1, 2), (2, 4, 2), (4, 4, 0), (3, 2, 3), (7, 1, 0), (5, 2, 1), (0, 6, 2), (6, 1, 1), (2, 2, 4), (1, 1, 6), (0, 2, 6), (7, 0, 1), (2, 1, 5), (0, 0, 8), (2, 0, 6), (2, 6, 0), (5, 0, 3), (2, 5, 1), (1, 6, 1), (8, 0, 0), (4, 1, 3), (6, 2, 0), (3, 5, 0), (0, 3, 5), (4, 2, 2), (1, 3, 4), (0, 7, 1), (1, 5, 2), (2, 3, 3), (3, 4, 1)}
关于python - 枚举A盒中N个球的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996004/