0
需要一個有點奇怪的公式。我有我得到的隨機數字,我需要他們分成兩組,每組的數量儘可能接近,但沒有數字可以重複。所以,如果我說1,2,3,44,12,5,7,9。我將A組分爲1,3和9,總數爲13和B組2,5,7,總數爲14.有時我收到6個數字,有時候是16個數字,通常是4位數字。有任何想法嗎?謝謝。從列表中找到最接近的號碼組
需要一個有點奇怪的公式。我有我得到的隨機數字,我需要他們分成兩組,每組的數量儘可能接近,但沒有數字可以重複。所以,如果我說1,2,3,44,12,5,7,9。我將A組分爲1,3和9,總數爲13和B組2,5,7,總數爲14.有時我收到6個數字,有時候是16個數字,通常是4位數字。有任何想法嗎?謝謝。從列表中找到最接近的號碼組
我認爲這可能是太難爲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)));
}
我投票作爲題外話,因爲一)沒有顯示出有原來努力縮小這個問題和b)這屬於在[編程難題和代碼高爾夫] (https://codegolf.stackexchange.com/)。 – Jeeped