【发布时间】:2010-09-26 22:42:44
【问题描述】:
我需要在JAVA中找到组合。
例如,我班上有 6 个学生。其中,我需要创建 4 人的组合,每组我可以选择一个亲密的 2 人组。
我必须确保没有双打(顺序无关紧要)。!并且需要打印 4 人组。
然而,这是困难的部分:
所以用数字定义学生:
如果我打印出1234作为组合之一,我不能也打印出1256,因为12同时出现在@中987654324@ 和1256。
如何用 Java 编写它?
已编辑
([1,2,3,4,5],3,2) 的输出将是:
无重复组合(n=5,r=3) {1,2,3} {1,2,4} {1,2,5} {1,3,4} {1,3,5} {1,4,5} {2,3,4} { 2,3,5} {2,4,5} {3,4,5}
删除 2 个元素的重复组,只会留下我:
{1,2,3} {1,4,5}(我删除了具有 12、13、23、45、14、15 组合的组,因为它们已经出现在我找到的前两个中。
【问题讨论】:
-
致所有痴迷家庭作业的人:她有点老了:)
-
to Odelya:你能发布你期望 6 名学生(或更少学生)的输出吗?我现在不知道如何解释问题(特别是关于“亲密”群体的问题)。
-
只是为了确保我理解:给定 N 个项目,您想生成一组子集 S,每个子集的大小为 M,这样一个子集中的两个项目不会出现在其他子集中? S的大小呢?此外,解决方案也不是唯一的。
-
@Odelya:例如对于 N=5、M=4 和 Z=2,解的大小为 1(例如 {{1,2,3,4}}),因为任何两个大小为 4 的子集至少有 2 个项目的交集。对吗?
-
@Odelya,您给出的解释不明确,因为最终结果取决于步骤 1 中生成的组合的顺序。例如如果我以相反的顺序遍历组合,最终结果将是 {3,4,5} {1,2,5}。您可能需要定义严格的迭代顺序以使结果明确。
标签: java algorithm math combinatorics combinations