c# - 查找 int[] 数组的所有可能组合,在 C# 中受长度限制

标签 c# arrays combinations

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[] 值添加到列表中,那就是!)。

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

请问有人有什么想法吗?

最佳答案

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

但是,这会让您入门:

把它想象成手工操作。大多数人会选择第一个值和第二个值并将它们写下来。然后他们会把那对写反了。然后他们会处理第一个值和第三个值,然后向后,依此类推。

它看起来像:

{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
    }
}

尝试理解这段代码的作用。然后填空。你应该得到正确的答案。不过,请始终确保了解原因。此外,尝试看看您是否可以找出对此代码的任何改进。

关于c# - 查找 int[] 数组的所有可能组合,在 C# 中受长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072372/

相关文章:

java - 如何将数组从 JNI 返回到 Java?

c++ - 递归算法将所有组合分为两组

ruby - 尝试创建一个对生成器

c# - 无法连接到Redis服务器

c# - 从远程文件共享下载文件会引发访问被拒绝

c++ - 在 C++ 中保存来自二维数组的灰度图像

c# - C#:0和1排列

应为 C# 方法名称

C# Mongo DeleteMany - 不使用类

javascript - 为什么 Array(x).map 没有返回正确的对象?