如果存在與元素的數組: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)
如果存在與元素的數組: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)
我的想法是:
(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
}
問題是,我需要爲n代碼,而不僅僅是4個數字 – Elma 2010-03-25 09:57:16
總是你可以分類我的數字,使大而不是4321: 無論如何,這是另一個問題,因爲'1000'和'100'應該只出現一次? – IProblemFactory 2010-03-25 18:37:21
編碼您在您的評論中提到的算法,在僞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
我認爲索引應該從1開始。 – Gabe 2010-03-30 04:37:27
是的,索引應該從1開始錯過空白組合,並且我的僞VB代碼也存在數組索引和浪費條目的問題。 – 2010-03-30 23:55:21
這是我前段時間寫的一個函數,用於生成給定數組的所有可能的子集。它是通用的,所以它支持整數,雙打,字符串等
原來的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
那你試試這麼遠嗎? – medopal 2010-03-24 16:30:55
只是看起來像另一個作業 – Regent 2010-03-24 16:32:25
這是我的最後一篇論文的一小部分,我需要那個形成容量輸出概率表,我將不勝感激幫助 – Elma 2010-03-24 16:39:14