c# 一个数组元素排列组合
想得到这个数组的所有22组合和33组合,没有重复项请问要怎么实现 求代码。 展开
从一个集合里取出N个元素组合,当N<=3时,用循环表述比较方便。
string[] values = { "A", "B", "C", "D", "E" };
Console.WriteLine("取2个组合:");
for (int i = 0; i < values.Length - 1; i++)
{
for (int j = i + 1; j < values.Length; j++)
Console.WriteLine(values[i] + values[j]);
}
Console.WriteLine("取3个组合:");
for (int i = 0; i < values.Length - 2; i++)
{
for (int j = i + 1; j < values.Length - 1; j++)
{
for (int k = j + 1; k < values.Length; k++)
Console.WriteLine(values[i] + values[j] + values[k]);
}
}
Console.ReadKey();
当N>3时,可以考虑用递归生成。
String[] zh = { "Ephedra", "CassiaTwig", "Dried_Ginger", "Asarum", "Pinellia_Ternate", "Roast_Liquorice", "Liquorice", "Unripe_Liquorice", "Schisandra_Chinensis", "WPR", "ROCP", "Peony" };
Console.WriteLine("22组合:");
for (int i = 0; i < zh.Length - 1; i++)
{
for (int j = i + 1; j < zh.Length; j++)
{
Console.WriteLine("[{0},{1}]", zh[i], zh[j]);
}
}
Console.WriteLine();
Console.WriteLine("33组合:");
for (int i = 0; i < zh.Length - 2; i++)
{
for (int j = i + 1; j < zh.Length - 1; j++)
{
for (int k = j + 1; k < zh.Length; k++)
{
Console.WriteLine("[{0},{1},{2}]", zh[i], zh[j], zh[k]);
}
}
}
string[] s ={ "a", "b", "c", "d", "e", "f", "g" };
//2个组合
Console.WriteLine("两个组合:");
for (int i = 0; i < s.Length - 1; i++)
{
for (int j = i + 1; j < s.Length; j++)
{
Console.WriteLine("[{0},{1}]", s[i], s[j]);
}
}
Console.WriteLine();
Console.WriteLine("三个组合");
for (int i = 0; i < s.Length - 2; i++)
{
for (int j = i + 1; j < s.Length - 1; j++)
{
for (int k = j + 1; k < s.Length; k++)
{
Console.WriteLine("[{0},{1},{2}]", s[i], s[j], s[k]);
}
}
}