打印非重复组合

时间:2015-05-12 14:03:55

标签: c# linq

我有6个字符串,例如A,B,C,D,E,F

我想在C#中打印如下,不要重复组合。

A
A + B
A + C
A + D
A + E
A + F

A + B + C
A + B + D
A + B + E
A + B + F

A + C + D
A + C + E
A + C + F

A + D + E
A + D + F

A + E + F

B + C + D
etc

可以使用Linq完成吗?任何方法对我来说都没关系。非常感谢。

1 个答案:

答案 0 :(得分:0)

有趣的任务。请尝试以下代码:

List<string> list = Enumerable.Range(1, 6).Select(e => ((char)('A' + e - 1)).ToString()).ToList();
List<string> temp = new List<string>();

int count = list.Count;
int total = 1 << list.Count;
for (int i = 0; i < total; i++)
{
    int k = i;
    temp.Clear();
    for (int j = 0; j < count; j++)
    {
        if ((k & 1) == 1)
        {
            temp.Add(list[j]);
        }
        k >>= 1;
    }
    Console.WriteLine(string.Join(" + ", temp.ToArray()));
}

输出:

A
B
A + B
C
A + C
B + C
A + B + C
D
A + D
B + D
A + B + D
C + D
A + C + D
B + C + D
A + B + C + D
E
A + E
B + E
A + B + E
C + E
A + C + E
B + C + E
A + B + C + E
D + E
A + D + E
B + D + E
A + B + D + E
C + D + E
A + C + D + E
B + C + D + E
A + B + C + D + E
F
A + F
B + F
A + B + F
C + F
A + C + F
B + C + F
A + B + C + F
D + F
A + D + F
B + D + F
A + B + D + F
C + D + F
A + C + D + F
B + C + D + F
A + B + C + D + F
E + F
A + E + F
B + E + F
A + B + E + F
C + E + F
A + C + E + F
B + C + E + F
A + B + C + E + F
D + E + F
A + D + E + F
B + D + E + F
A + B + D + E + F
C + D + E + F
A + C + D + E + F
B + C + D + E + F
A + B + C + D + E + F