2017-06-01 15 views
0

少し奇妙なもののための数式が必要です。私は得た乱数を持っているので、2つのグループができるだけ近くにある2つのグループに入る必要がありますが、数字は複製できません。だから、私が1,2,3,44,12,5,7,9と言うならば、私はグループAを1,3と9として計13、グループb 2,5,7を合計で14.時々私は6個の数字を受け取ることがあります。時には16個の数字、通常は4桁の数字です。何か案は?ありがとうございました。リストから最も近い数字のグループを見つける

+0

私がオフトピックとして、この質問を閉じるために投票していますa)に示す全くオリジナルの努力がないと、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(); 

注意(1,2,3)、(5,7,9)など、あなたの最小値に一致する20の可能なペアのグループがあります。

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))); 
} 
関連する問題