当前位置: 首页 > 知识库问答 >
问题:

查找 int[] 数组的所有可能组合,受 C 语言长度约束#

申屠泳
2023-03-14
int[] listOfValues = {1, 2, 5, 2, 6};

我需要能够找到这个数组的所有对组合,包括重复。数组中的每个值都来自一副牌。因此,例如,如果值“2”在数组中出现两次,我们可以假设这是两个不同的值,因此需要单独处理。

期望的纸牌对样本:

{1, 2}
{1, 2}
{2, 1}
{2, 1}
{2, 2}
{1, 5}
{1, 6}
etc.......

然后需要将这些单独的int[]结果添加到列表中(如果您甚至可以将重复的int[]值添加到列表,即!),一旦找到了所有可能的值。

我在网上找了几个小时,似乎无法获得任何适合我特定任务的解决方案。

有人有什么想法吗?

共有3个答案

季城
2023-03-14

感谢 Clay07g 的帖子,我能够使用以下代码解决问题:

public static List<int[]> getCardCombos(int[] values)
{
  List<int[]> pairs = new List<int[]>();

  for (int x = 0; x < values.Length - 1; x++)
  {
    for (int y = x + 1; y < values.Length; y++)
    {
      int firstValue = values[x];
      int secondValue = values[y];

      // Create an array of the [x] position and [y] position of listOfValues 
      int[] xAndY = { firstValue, secondValue};
      // Create another array, except swap the positions {[y],[x]}
      int[] yAndX = { secondValue, firstValue };

      pairs.Add(xAndY);
      pairs.Add(yAndX);
      // Add both arrays to the "pairs" List
    }
  }
  return pairs;
}
甘永春
2023-03-14

有了linq,你可以这样做。

int[] listOfValues = { 1, 2, 5, 2, 6 };
        var combination = listOfValues.Select(i => listOfValues.Select(i1 => new Tuple<int, int>(i, i1)).ToList())
            .ToList()
            .SelectMany(list => list.Select(x => x)).ToList();
云欣嘉
2023-03-14

你真的应该自己做作业。或者至少先试试。你没有提供代码,所以我不能从道德上给你完整的解决方案。

但是,这将帮助您入门:

想一想,就好像你要用手做一样。大多数人会选择第一个值和第二个值并将它们写下来。然后他们会把这一对倒过来写。然后他们将执行第一个值和第三个值,然后向后,依此类推。

它看起来会像这样:

{1,2}

{2,1}

{1,5}

{5,1}

{1,2}

{2,1}

{1,6}

{6,1}

{2,5 }-现在我们再次迭代,从第二个值开始

那么我们如何在代码中表达呢?嵌套循环!

以下是解决您问题的算法的骨架:

List<int[]> pairs = new List<int[]>();

for(int x = 0; x < listOfValues.Length - 1; x++)
{
    for(int y = x+1; y < listOfValues.Length; y++)
    {
        // Create an array of the [x] position and [y] position of listOfValues
        // Create another array, except swap the positions {[y],[x]}

        // Add both arrays to the "pairs" List
    }
}

试着理解这段代码在做什么。然后填空。你应该得到正确的答案。不过,一定要理解为什么。此外,试着看看你是否能找出对这段代码的任何改进。

 类似资料:
  • 我正在尝试构造一个程序,该程序将获取一个int({1,2,3})数组和一个长度值,并计算该数组的所有可能组合。 例如: 这将输出: 但是当我尝试在 for 循环中调用可能的梳子时,我不断收到堆栈溢出错误 }

  • 问题内容: 当我尝试做这样的事情时,我意识到我真的需要上大学! 无论如何,我都有一个字符串数组(275),我需要遍历它们并用Java创建所有可能对的字符串。 我一直在学习递归,但是我找不到答案。 问题答案: 如果对和不同,请执行以下操作: 如果没有,请执行以下操作: 请注意,我假设数组包含唯一的字符串!

  • 问题内容: 从最小和最大长度值的给定数组中获取所有可能的字符串组合的最佳算法是什么? 注意:这增加了复杂性,因为值是可变的,与链接到的问题不同。 例如: 问题答案: 几乎是基本转换 此解决方案是出于以下观察的目的:如果不是为了在有效组合的高位位置重复数组索引0处的字符,则此问题将只是从十进制到新的基数的基数转换。从0到(base ^ length)-1的所有整数。所以, 困难在于,它会错过与一个或

  • 问题内容: 我需要获取数组的所有可能的子集,其中至少要包含2个项目,而最大未知数。有人可以帮助我一点吗? 说我有这个… …我怎么得到这个? 问题答案: 窃取此JavaScript组合生成器后,我添加了一个参数以提供最小长度,从而, 要使用,提供一个数组以及所需的最小子集长度, 输出是

  • 问题内容: 如何在N个可变长度的JavaScript数组中生成值的所有组合? 假设我有N个JavaScript数组,例如 (在此示例中为三个数组,但针对该问题的数组数为N。) 我想输出其值的所有组合,以产生 编辑:这是我使用ffriend接受的答案作为基础的版本。 问题答案: 这不是排列,请参阅Wikipedia中的排列定义。 但是您可以通过 递归 实现: 您也可以使用循环来实现,但是这会有些棘手

  • 问题内容: 如何找到二维数组中的行和列数? 例如, 应该显示为3行2列。 问题答案: 像这样: 假定所有子列表具有相同的长度(也就是说,它不是锯齿状的数组)。