Алгоритм который бы комбинировал элементы без повторений - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте все! У меня появилась такая проблема я немогу придумать алгоритм который бы комбинировал элементы без повторений, возможно вопрос звучит мутно, покажу на примере: допустим есть 1_2_3, и в итоге я бы хотел получить все аболютные комбинации среди этих элементов, т.е. в итоге должно быть 1, 2, 3, 1_2, 1_3, 2_3,1_2_3, можно сказать что и будут такие комбинации, как 2_1, 3_2, 3_1 но мне они не нужны(ну по сути даже можно и с повторением, все равно его убрать будет просто - обычной сортировкой и сверкой), читал много форумов и размыто было написано о том что есть встроенный метод который делает это, но что это за метод?!?!? //забыл добавить что количество элементов будет считываться с обычного текст бокса и будут записываться в массив(как стринговый так и интовый и т.п, но это не проблема все сплитом решается)

Решение задачи: «Алгоритм который бы комбинировал элементы без повторений»

textual
Листинг программы
  1.         public static void Main(string[] args)
  2.         {
  3.             int[] arr = {1, 2, 3};
  4.             PrintPermutation(arr);
  5.  
  6.             string[] str = {"a", "b", "c"};
  7.             PrintPermutation(str);
  8.         }
  9.  
  10.         private static void PrintPermutation<T>(T[] arr)
  11.         {
  12.             for (var i = 1; i <= arr.Length; i++)
  13.             {
  14.                 var enumerable = Generate(arr, i);
  15.  
  16.                 foreach (var list in enumerable)
  17.                 {
  18.                     Console.WriteLine(String.Join(", ", list));
  19.                 }
  20.             }
  21.         }
  22.  
  23.         public static IEnumerable<IEnumerable<T>> Generate<T>(IEnumerable<T> list, int n)
  24.         {
  25.             if (n == 1) return list.Select(e => new[] {e});
  26.  
  27.             var l = list.ToList();
  28.  
  29.             return Generate(l, n - 1)
  30.                 .SelectMany(t => l.Where(e => !t.Contains(e)),
  31.                             (t1, t2) => t1.Concat(new[] {t2}));
  32.         }

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


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

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

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы