排列组合啊。说清楚啊,是排列还是组合 // 组合枚举方法, 返回数列的全部组合,data=数列,n=每组长度 static public IEnumerable<T[]> Comb<T>(T[] data, int n) { int m = data.Length; int[] c = Enumerable.Repeat(int.MaxValue, n).ToArray(); for (c[n - 1] = 0; ; c[0]++) { if (c[0] > m) { int p; for (p = 1; p < n; p++) if (c[p] < m - p) break; if (p >= n) yield break; c[p]++; for (int i = p - 1; i >= 0; i--) c[i] = c[i + 1] + 1; } yield return c.Select(i => data[i - 1]).ToArray(); } }
for (int i = 0; i < 10; i++)//A--J=10,变成数组后可得长度 { for (int j = i+1; j < 10; j++) { for (int k = j+1; k < 10; k++) { for (int l = k+1; l < 10; l++) { Console.WriteLine("四字组合 " + i + "+" + j + "+" + k + "+" + l + ""); } } } }
static public IEnumerable<T[]> Comb<T>(T[] data, int n)
{
int m = data.Length;
int[] c = Enumerable.Repeat(int.MaxValue, n).ToArray(); for (c[n - 1] = 0; ; c[0]++)
{
if (c[0] > m)
{
int p;
for (p = 1; p < n; p++)
if (c[p] < m - p) break;
if (p >= n) yield break; c[p]++;
for (int i = p - 1; i >= 0; i--)
c[i] = c[i + 1] + 1;
}
yield return c.Select(i => data[i - 1]).ToArray();
}
}
{
for (int j = i+1; j < 10; j++)
{
for (int k = j+1; k < 10; k++)
{
for (int l = k+1; l < 10; l++)
{
Console.WriteLine("四字组合 " + i + "+" + j + "+" + k + "+" + l + "");
}
}
}
}