Алгоритм который бы комбинировал элементы без повторений - 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}));
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д