如何根据提供的限制进行组合?

pri*_*kar 3 c# linq combinations

我有一个数组如下

var x = new int[] { 1,2,3 };
Run Code Online (Sandbox Code Playgroud)

并给出了限制

int limit=2;
Run Code Online (Sandbox Code Playgroud)

我必须找到一个组合

1+2 = 3
1+3 = 4
2+3 = 5.
Run Code Online (Sandbox Code Playgroud)

如果说数组

var x = new int[] { 1,2,3,4,5,6};
Run Code Online (Sandbox Code Playgroud)

并给出了限制

int limit=3;
Run Code Online (Sandbox Code Playgroud)

组合应该是

1+2+3 = 6
 1+2+4 = 7
 1+2+5 = 8
 1+2+6 = 9
 2+3+4  = 9
 2+3+5 = 10
 2+3+6 = 11
...........
............
Run Code Online (Sandbox Code Playgroud)

等等

怎么办?

我的挫败感很糟糕

var x = new int[] {1,2,3};
        int limit = 2;

        var m = from a1 in x
                from a2 in x                
                select new
                    {
                        P1 = a1 ,
                        P2 = a2,                     
                        P3 = a1+a2
                    };
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

我会使用这个有效的组合学项目,这也值得一读:

使用C#泛型的排列,组合和变体

然后它很简单:

var x = new int[] { 1, 2, 3, 4, 5, 6 };
var combis = new Facet.Combinatorics.Combinations<int>(x, 3, Facet.Combinatorics.GenerateOption.WithoutRepetition);
foreach(var combi in combis)
    Console.WriteLine(String.Join("+", combi) + "=" + combi.Sum());
Console.WriteLine("Total: " + combis.Sum(c => c.Sum())); // 201
Run Code Online (Sandbox Code Playgroud)

输出:

1+2+3=6
1+2+4=7
1+2+5=8
1+2+6=9
1+3+4=8
1+3+5=9
1+3+6=10
1+4+5=10
1+4+6=11
1+5+6=12
2+3+4=9
2+3+5=10
2+3+6=11
2+4+5=11
2+4+6=12
2+5+6=13
3+4+5=12
3+4+6=13
3+5+6=14
4+5+6=15
Total: 210
Run Code Online (Sandbox Code Playgroud)