我想列举一个盒子里N个球的所有可能组合。
例子:
我有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和n是用户的输入。那么,如何在不编写用户可能需要的所有循环数的情况下进行呢?
a和N的值在2到~800之间,因此对计算时间要求很高如何优化算法?
如果你能用python语言回答我,我将不胜感激。
感谢大家的贡献!

最佳答案

从Python2.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)}

10-01 14:24