Страница 1 из 1
Перестановки в массиве
Добавлено: 06 авг 2006, 20:29
3ikeR
Мне нужно сделать все возможные перестановки элементов в массиве ,без повторений,...как это выполнить?
Добавлено: 07 авг 2006, 01:53
Mihij
Могу сбросить пример, но только на с. В принципе здесь важен алгоритм действий.
Добавлено: 07 авг 2006, 07:34
3ikeR
Только приветствую,хотя в синтаксисе "с" не разбираюсь,ну да ладно)))
Добавлено: 08 авг 2006, 00:05
Mihij
Вопрос. А нужно просто просчитать все возможные комбинации? Или их еще вевести на экран? Если только расчитать их количество то тут и программировать нечего. N!. Где N - число элементов в массиве.
Добавлено: 08 авг 2006, 16:29
3ikeR
нет-нет)) Все возможные комбинации,можно и не выводить на экран...количество комбинаций в массиве бедт не N))
Пример: 123
213
231
321
312
132 число комбинаций из определенного числа элементов будет равно N! .... В Pascal это делается как-то с помощью рекурсии или множеств,не помню....
Добавлено: 13 авг 2006, 02:37
corb
Ошибаетесь, это как раз и будет N-факториал. Даже в вашем примере - 3 числа дают 6 вариантов. 3! = 6.
Добавлено: 18 авг 2006, 14:18
3ikeR
Любое количество перестановок равно N!--я это и написал))
Никто не знает вроде...
Добавлено: 20 авг 2006, 23:05
Mihij
Возможно что-то я не понял, но вся проблема в расчете факториала? Тогда такой нехитрый текст. Компилятора нету, Паскаль не мой язык, но все должно работать.
Код: Выделить всё
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)!)
На этом основываются некоторые статистические методы, например критерий рандомизации. Он у меня есть, реализованный на С. Тоже не ахти чего сложного, но на Паскаль переводить не буду.
