2009-05-28 4 views
0

У меня есть массив, как показано нижесочетание вопрос

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
.......
.......
.......

+1

Вы просите перестановки? Например: {2,4,6,8}, {2,4,8,6}, ... –

+2

Также, если это для домашней работы, вы должны пометить его как таковой. –

ответ

0

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

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

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

+0

Я думаю, что N = 4 - его верхний предел. –

+0

Хорошо, я пропустил это! – Daemonic

0

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

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

Мой вопрос к вам будет, как вы можете выразить это через факториалы?

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

Смежные вопросы