n-elementowe kombinacje z m-elementowego zbioru

0

Witajcie, mam problem z napisaniem kodu, który tak jak w temacie wybierał by po kolei wszystkie n-elementowe kombinacje cyfr z zadanego zbioru. np z tablicy liczb {1,2,3,4,5} gdy chcemy 2-elemontowe kombinacje to wypisuje kolejno 12, 13, 14, 15, 23, 24, 25, 34, 35, 45 (nie bierze dwa razy tej samej cyfry). Z góry dziękuję za odpowiedź. :)

2

To raczej przykład jak tego nie robić (równie czytelne co wydajne, czyli niezbyt), ale prawie jednolinijkowiec w LINQ (gdyby przepisać za pomocą ?: to byłby jednolinijkowiec):

static IEnumerable<IEnumerable<int>> Combinations(IEnumerable<int> source, int n)
{
    if (n <= 0) { return new[] { new int[0] }; }
    return source.SelectMany(x => Combinations(source.Where(y => y < x), n - 1).Select(y => y.Concat(new[] { x })));
}

Użycie:

var c = Combinations(new[] { 1, 2, 3, 4, 5 }, 2);
foreach (var x in c)
{
    Console.WriteLine(string.Join(" ", x));
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1