【发布时间】:2011-11-15 08:20:51
【问题描述】:
我需要获取一个列表(最多 n=31)并返回 n=3 的所有可能子集的代码,而没有任何两个元素在同一子集中重复两次(想想以 3 人一组的人与新的人每次):
list=[1,2,3,4,5,6,7,8,9]
然后返回
[1,2,3][4,5,6][7,8,9]
[1,4,7][2,3,8][3,6,9]
[1,6,8][2,4,9][3,5,7]
但不是:
[1,5,7][2,4,8][3,6,9]
因为 1 和 7 已经一起出现了(同样,3 和 9)。
我也想对n=2 的子集执行此操作。
谢谢!!
【问题讨论】:
-
“所有可能”与“已经一起出现”不一致。为什么我们选择包含
[1,4,7][2,3,8][3,6,9]并因此排除[1,5,7][2,4,8][3,6,9],而不是相反? -
总数不是组大小的倍数怎么办?将临时演员视为一个较小的群体?轮换他们,但忽略他们不在一个组中时会发生什么?还是那组条件不是有效的输入?
-
感谢 cmets。现在,我们假设 N 是组大小的倍数(N=30,n=3)。
-
感谢 cmets。 @Thomas:现在,我们假设 N=30,n=3。
-
@Karl:好点...这不是我想过的点...但是我可以在选项之间随机选择。