2017-06-01 75 views
0

需要一個有點奇怪的公式。我有我得到的隨機數字,我需要他們分成兩組,每組的數量儘可能接近,但沒有數字可以重複。所以,如果我說1,2,3,44,12,5,7,9。我將A組分爲1,3和9,總數爲13和B組2,5,7,總數爲14.有時我收到6個數字,有時候是16個數字,通常是4位數字。有任何想法嗎?謝謝。從列表中找到最接近的號碼組

+0

我投票作爲題外話,因爲一)沒有顯示出有原來努力縮小這個問題和b)這屬於在[編程難題和代碼高爾夫] (https://codegolf.stackexchange.com/)。 – Jeeped

回答

0

我認爲這可能是太難爲Excel,但如果你想嘗試,在指點你在正確的方向的希望,這裏是一些C#LINQ代碼來生成你的答案:

var possibles = src.Combinations(3).SelectMany(ps => src.Except(ps).Combinations(3).Select(ps2 => new { ps, ps2 })).Select(psps2 => new { sum = psps2.ps.Sum()+psps2.ps2.Sum(), psps2.ps, psps2.ps2 }); 
var minsum = possibles.Min(psps2sum => psps2sum.sum); 
var possibleans = possibles.Where(psps2sum => psps2sum.sum == minsum).First(); 

注有20個可能的組對匹配你的最小值,如(1,2,3),(5,7,9)。

Combinations擴展低於:

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k) { 
    return k == 0 ? new[] { new T[0] } : 
     elements.SelectMany((e, i) => 
     elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] { e }).Concat(c))); 
}