Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在VB中实现数组元素的所有可能和组合_Vb.net_Arrays_Elements_Combinatorics - Fatal编程技术网

Vb.net 如何在VB中实现数组元素的所有可能和组合

Vb.net 如何在VB中实现数组元素的所有可能和组合,vb.net,arrays,elements,combinatorics,Vb.net,Arrays,Elements,Combinatorics,如果存在一个包含元素1、2、3、4的数组,则程序应返回另一个包含所有组合之和的数组: 1 2 3 4 3 (1+2) 4 (1+3) 5 (1+4) 5 (2+3) 6 (2+4) 7 (3+4) 6 (1+2+3) 7 (1+2+4) 8 (1+3+4) 9 (2+3+4) 10 (1+2+3+4) 我的想法是: 假代码,我不知道;我不懂VB for(int i = 0; i < 4321; i++) { i mod 10 + // first from right digit

如果存在一个包含元素1、2、3、4的数组,则程序应返回另一个包含所有组合之和的数组:

1 2 3 4 3 (1+2) 4 (1+3) 5 (1+4) 5 (2+3) 6 (2+4) 7 (3+4) 6 (1+2+3) 7 (1+2+4) 8 (1+3+4) 9 (2+3+4) 10 (1+2+3+4) 我的想法是:

假代码,我不知道;我不懂VB

for(int i = 0; i < 4321; i++)
{
    i mod 10 + // first from right digit
    (int)((i mod 100)mod 10) // second, (?)
    // etc
    // sum up all 4 digit
    // add to array  
}
我的想法是:

假代码,我不知道;我不懂VB

for(int i = 0; i < 4321; i++)
{
    i mod 10 + // first from right digit
    (int)((i mod 100)mod 10) // second, (?)
    // etc
    // sum up all 4 digit
    // add to array  
}

用伪VB代码对您在评论中提到的算法进行编码:

ReDim result(2 ^ (Length of Array) - 1)
for index = 0 to 2 ^ (Length of Array) - 1
  sum = 0
  for counter = 0 to (Length of Array) - 1
    If ((2 ^ counter) And index) <> 0 Then
      sum += Array(counter+1)

  result(index) = sum

用伪VB代码对您在评论中提到的算法进行编码:

ReDim result(2 ^ (Length of Array) - 1)
for index = 0 to 2 ^ (Length of Array) - 1
  sum = 0
  for counter = 0 to (Length of Array) - 1
    If ((2 ^ counter) And index) <> 0 Then
      sum += Array(counter+1)

  result(index) = sum

这是我不久前编写的一个函数,用于生成给定数组的所有可能子集。它是泛型的,所以它支持整数、双精度、字符串等

原文C

public static List<T[]> CreateSubsets<T>(T[] originalArray)
{
    List<T[]> subsets = new List<T[]>();

    for (int i = 0; i < originalArray.Length; i++)
    {
        int subsetCount = subsets.Count;
        subsets.Add(new T[] { originalArray[i] });

        for (int j = 0; j < subsetCount; j++)
        {
            T[] newSubset = new T[subsets[j].Length + 1];
            subsets[j].CopyTo(newSubset, 0);
            newSubset[newSubset.Length - 1] = originalArray[i];
            subsets.Add(newSubset);
        }
    }

    return subsets;
}
它可以用这种方式消费

    Dim array() As Integer = {1, 2, 3, 4, 5}
    Dim subsets As List(Of Integer()) = CreateSubsets(array)

    For Each subset As Integer() In subsets

        Dim sum As Integer = subset.Sum()

    Next

这是我不久前编写的一个函数,用于生成给定数组的所有可能子集。它是泛型的,所以它支持整数、双精度、字符串等

原文C

public static List<T[]> CreateSubsets<T>(T[] originalArray)
{
    List<T[]> subsets = new List<T[]>();

    for (int i = 0; i < originalArray.Length; i++)
    {
        int subsetCount = subsets.Count;
        subsets.Add(new T[] { originalArray[i] });

        for (int j = 0; j < subsetCount; j++)
        {
            T[] newSubset = new T[subsets[j].Length + 1];
            subsets[j].CopyTo(newSubset, 0);
            newSubset[newSubset.Length - 1] = originalArray[i];
            subsets.Add(newSubset);
        }
    }

    return subsets;
}
它可以用这种方式消费

    Dim array() As Integer = {1, 2, 3, 4, 5}
    Dim subsets As List(Of Integer()) = CreateSubsets(array)

    For Each subset As Integer() In subsets

        Dim sum As Integer = subset.Sum()

    Next

到目前为止你尝试了什么?看起来像是另一个家庭作业它是我最后论文的一小部分,我需要它来形成容量输出概率表,我将非常感谢你的帮助我有一个想法,我试图形成一个2^n的数字,有n个数字,用每个元素乘以每个数字111 X 123 110 X 123 101 X 123 100 X 123 010 X 123 011 X 123 001 X 123 000 X 123但我在需要更多数字时遇到了麻烦你到目前为止做了什么?看起来像是另一个家庭作业它是我最后论文的一小部分,我需要它来形成容量输出概率表,我会很感激你的帮助我有个主意,我试着用n个数字组成一个2^n的数字,然后用每个元素乘以每个数字111 X 123 110 X 123 101 X 123 100 X 123 010 X 123 011 X 123 001 X 123 000 X 123,但我遇到了麻烦,当我需要更多的数字时,问题是我需要为n编写代码,不只是4个数字,你可以排序你的数字,并使最大的数字,而不是4321:无论如何,这是另一个问题,因为1000和100应该只出现一次?问题是,我需要为n的代码,而不仅仅是4个数字,你可以排序你的数字,并使最大的数字,而不是4321:无论如何,这是另一个问题,因为1000和100应该只出现一次?我认为索引应该从1开始。是的,索引应该从1开始以错过空组合,我的伪VB代码也有数组标记和浪费项的问题。我认为索引应该从1开始。是的,索引应该从1开始以错过空组合,我的伪VB代码也有数组标记和浪费条目的问题。