Алгоритм который бы комбинировал элементы без повторений - 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}));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы