Вопрос

у меня есть массив, подобный приведенному ниже

int[] array = new array[n];// n may be 2,3,4

пример для N = 4

int[] array = new array[4];

array[0] = 2;
array[1] = 4;
array[2] = 6;
array[3] = 8;

как я могу вычислить всю неповторимую комбинацию этого массива без использования linq внутри?

2,4,6,8
2,4,8,6
2,8,6,4
2,6,4,6
8,6,4,2
2,4,6,8
.......
.......
.......

Это было полезно?

Решение

Вот такой довольно гибкая реализация на C # использование итераторов.

Другие советы

Что ж, учитывая, что вы ищете все неповторимые комбинации, это означает, что их будет N!такие комбинации...(итак, в вашем случае, N!= 4!= 24 таких комбинации).

Поскольку я нахожусь в процессе публикации этого, доммер указал на хорошую реализацию.

Просто имейте в виду, что это будет очень медленно при больших значениях N (поскольку существует N!перестановки).

Подумайте о двух возможных состояниях мира, чтобы увидеть, проливает ли это какой-нибудь свет.

1) В моем массиве нет дубликатов (т.е.каждое число в массиве уникально).В этом случае, сколько возможных перестановки есть ли такие?

2) В массиве есть один-единственный обман.Итак, сколько из числа перестановок, которые вы вычислили в первой части, являются просто дубликатами

Хммм, давайте для простоты возьмем массив из трех элементов

1,3,5 имеет сколько перестановок?

1,3,5

1,5,3

3,1,5

3,5,1

5,1,3

5,3,1

Итак, шесть перестановок

Теперь, что произойдет, если мы изменим список, скажем, на 1,5,5?

Мы получаем

1,5,5

5,1,5

5,5,1

Мой вопрос к вам был бы таков: как вы можете выразить это с помощью факториалов?

Может быть, попробовать записать все перестановки с помощью массива из четырех элементов и посмотреть, погаснет ли лампочка?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top