生成唯一的整数组合

Generate Unique Combinations of Integers

我正在寻求有关伪代码的帮助(除非您是 Mark Overmars 的 Game Maker 8.0 的用户并且知道我需要的 GML 等价物)以了解如何生成一组 X 个整数的唯一组合的列表/数组,其大小是可变的。它可以是 1-5 或 1-1000。

例如:

整数列表{1,2,3,4}

1,2

1,3

1,4

2,3

2,4

3,4

我觉得这背后的数学原理很简单,我只是在检查了多个来源以了解如何使用 C++ 和 Java 等语言来完成之后似乎无法理解它。谢谢大家。

由于问题的细节不多,我假设:

  • 您输入的是一个自然数n,结果数组包含从1n的所有自然数。
  • 上述组合给出的预期输出类似于对称关系,i。 e.在你的情况下 [1, 2] 被认为与 [2, 1].
  • 相同
  • 组合 [x, x] 被排除。
  • 只有 2 个元素的组合。
  • 没有 List<> 数据类型或动态数组,因此在创建数组之前必须知道数组长度。
  • 因此,结果中的元素数是二项式系数 m = n over 2 = n! / (2! * (n - 2)!)(在您的示例中是 4! / (2! * (4 - 2)!) = 24 / 4 = 6),! 是阶乘。

首先,使用数组元素索引,用前n个自然数初始化数组应该很容易。但是,索引是数组元素的属性,所以你不需要首先初始化它们。

您需要 2 个嵌套循环来处理数组。外循环范围i1n - 1,内循环范围j2n。如果您的索引从 0 而不是 1 开始,您必须考虑循环限制。现在,您只需要用 [i, j] 组合填充您的目标数组。要在目标数组中找到正确的索引,您应该使用第三个计数器变量,用第一个索引初始化并在内循环结束时递增。

我同意,背后的数学并不难,我认为这个解释应该足以自己开发相应的代码。