Алгоритм который бы комбинировал элементы без повторений - C#
Формулировка задачи:
Здравствуйте все! У меня появилась такая проблема я немогу придумать алгоритм который бы комбинировал элементы без повторений, возможно вопрос звучит мутно, покажу на примере: допустим есть 1_2_3, и в итоге я бы хотел получить все аболютные комбинации среди этих элементов, т.е. в итоге должно быть 1, 2, 3, 1_2, 1_3, 2_3,1_2_3, можно сказать что и будут такие комбинации, как 2_1, 3_2, 3_1 но мне они не нужны(ну по сути даже можно и с повторением, все равно его убрать будет просто - обычной сортировкой и сверкой), читал много форумов и размыто было написано о том что есть встроенный метод который делает это, но что это за метод?!?!?
//забыл добавить что количество элементов будет считываться с обычного текст бокса и будут записываться в массив(как стринговый так и интовый и т.п, но это не проблема все сплитом решается)
Решение задачи: «Алгоритм который бы комбинировал элементы без повторений»
textual
Листинг программы
public static void Main(string[] args) { int[] arr = {1, 2, 3}; PrintPermutation(arr); string[] str = {"a", "b", "c"}; PrintPermutation(str); } private static void PrintPermutation<T>(T[] arr) { for (var i = 1; i <= arr.Length; i++) { var enumerable = Generate(arr, i); foreach (var list in enumerable) { Console.WriteLine(String.Join(", ", list)); } } } public static IEnumerable<IEnumerable<T>> Generate<T>(IEnumerable<T> list, int n) { if (n == 1) return list.Select(e => new[] {e}); var l = list.ToList(); return Generate(l, n - 1) .SelectMany(t => l.Where(e => !t.Contains(e)), (t1, t2) => t1.Concat(new[] {t2})); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д