2010-03-24 41 views
1

如果存在與元素的數組:1,2,3,4,程序應該返回另一個陣列的所有組合的總和:如何使從數組元素的所有可能的總和組合在VB

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)
+3

那你試試這麼遠嗎? – medopal 2010-03-24 16:30:55

+0

只是看起來像另一個作業 – Regent 2010-03-24 16:32:25

+1

這是我的最後一篇論文的一小部分,我需要那個形成容量輸出概率表,我將不勝感激幫助 – Elma 2010-03-24 16:39:14

回答

0

我的想法是:

(pseudcode,我不;知道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 
} 
+0

問題是,我需要爲n代碼,而不僅僅是4個數字 – Elma 2010-03-25 09:57:16

+0

總是你可以分類我的數字,使大而不是4321: 無論如何,這是另一個問題,因爲'1000'和'100'應該只出現一次? – IProblemFactory 2010-03-25 18:37:21

0

編碼您在您的評論中提到的算法,在僞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 
+0

我認爲索引應該從1開始。 – Gabe 2010-03-30 04:37:27

+0

是的,索引應該從1開始錯過空白組合,並且我的僞VB代碼也存在數組索引和浪費條目的問題。 – 2010-03-30 23:55:21

4

這是我前段時間寫的一個函數,用於生成給定數組的所有可能的子集。它是通用的,所以它支持整數,雙打,字符串等

原來的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; 
} 

而我只是轉換爲VB的版本。

Function CreateSubsets(Of T)(ByVal originalArray() As T) As List(Of T()) 

    Dim subsets As New List(Of T()) 

    For i As Integer = 0 To originalArray.Length - 1 

     Dim subsetCount As Integer = subsets.Count 
     subsets.Add(New T() {originalArray(i)}) 

     For j As Integer = 0 To subsetCount - 1 
      Dim newSubset(subsets(j).Length) As T 
      subsets(j).CopyTo(newSubset, 0) 
      newSubset(newSubset.Length - 1) = originalArray(i) 
      subsets.Add(newSubset) 
     Next 

    Next 

    Return subsets 

End Function 

它可以以這種方式被消費

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 
+0

+1的片段 - 很好,乾淨和短。安東尼! – Mike 2010-05-21 20:18:09

+0

它可以用盡內存快.... – cyrianox 2014-02-24 16:37:21

相關問題