Перестановки в массиве

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
3ikeR
Сообщения: 5
Зарегистрирован: 06 авг 2006, 20:20
Откуда: Тюмень
Контактная информация:

Мне нужно сделать все возможные перестановки элементов в массиве ,без повторений,...как это выполнить?
Mihij
Сообщения: 55
Зарегистрирован: 03 май 2004, 11:58
Откуда: Санкт-Петербург
Контактная информация:

Могу сбросить пример, но только на с. В принципе здесь важен алгоритм действий.
3ikeR
Сообщения: 5
Зарегистрирован: 06 авг 2006, 20:20
Откуда: Тюмень
Контактная информация:

Только приветствую,хотя в синтаксисе "с" не разбираюсь,ну да ладно)))
Mihij
Сообщения: 55
Зарегистрирован: 03 май 2004, 11:58
Откуда: Санкт-Петербург
Контактная информация:

Вопрос. А нужно просто просчитать все возможные комбинации? Или их еще вевести на экран? Если только расчитать их количество то тут и программировать нечего. N!. Где N - число элементов в массиве.
3ikeR
Сообщения: 5
Зарегистрирован: 06 авг 2006, 20:20
Откуда: Тюмень
Контактная информация:

нет-нет)) Все возможные комбинации,можно и не выводить на экран...количество комбинаций в массиве бедт не N))
Пример: 123
213
231
321
312
132 число комбинаций из определенного числа элементов будет равно N! .... В Pascal это делается как-то с помощью рекурсии или множеств,не помню....
corb
Сообщения: 4
Зарегистрирован: 13 авг 2006, 01:51

Ошибаетесь, это как раз и будет N-факториал. Даже в вашем примере - 3 числа дают 6 вариантов. 3! = 6.
3ikeR
Сообщения: 5
Зарегистрирован: 06 авг 2006, 20:20
Откуда: Тюмень
Контактная информация:

Любое количество перестановок равно N!--я это и написал))

Никто не знает вроде...
Mihij
Сообщения: 55
Зарегистрирован: 03 май 2004, 11:58
Откуда: Санкт-Петербург
Контактная информация:

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

Код: Выделить всё

Program Facktorial;
uses crt;
var
R:integer;
procedure Factorial(n:integer); 
var i,s:integer;
begin
s:=1;
for i:=1 to n do {вот реализуется формула n!}
 begin
  s:=s*i;
 end;
writeln('Factorial ->',s); {выводится результат}
end;
BEGIN {начало основной программы}
clrscr;
write('Vvedite chislo: ');  введите число для кот. нужно рассчитать факториал
read(R);
Factorial(R);
readln;
Writeln('Press to <ENTER>'); 
readln;

END.
Если нужно рассчитать число комбинаций N из общего числа m, то есть формула

C=m!/(N!*(m*N)!)

На этом основываются некоторые статистические методы, например критерий рандомизации. Он у меня есть, реализованный на С. Тоже не ахти чего сложного, но на Паскаль переводить не буду. :)
Ответить