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ź. :)

- Rejestracja:około 11 lat
- Ostatnio:ponad 8 lat
- Postów:14

- Rejestracja:około 16 lat
- Ostatnio:5 miesięcy
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));
}

Pawell1029
A jeszcze jedno pytanko. Jak się dobrać w tym foreach np. tylko do drugiej z tych cyfr?

msm
W którym foreach, przy wypisywaniu? Możesz użyć metody ElementAt (https://msdn.microsoft.com/en-us/library/bb299233%28v=vs.110%29.aspx) - albo, jeśli chcesz robić więcej operacji - zmienić w tablicę za pomocą ToArray() i odnosić się normalnie jak do tablicy.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.