从列表中找到最接近的数字组

时间:2017-06-01 21:43:24

标签: excel excel-formula

需要一个有点奇怪的公式。我有随机数字,我需要它们分为2组,每组3组,两组尽可能接近,但没有数字可以重复。所以,如果我说1,2,3,44,12,5,7,9,我将A组分别为1,3和9,总共13组,b组为2,5,7,共计14.有时我会收到6个号码,有时候是16个号码,通常是4位数字。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分: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)));
}