|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Politov 2:5015/176.18 21 Mar 2002 07:24:53 To : "Vasily Ushakoff" Subject : Re^2: Сочетания K из N, где имеет значение порядок -------------------------------------------------------------------------------- До меня дошли слухи, что *20.03.02* *18:18:28* пролетало сообщение от Vasily к *Alexander Krotoff* про *"Re: Сочетания K из N, где имеет значение порядок"*. И я решил вмешаться. >> VU> Полазил по Googl'у, но видел только алгоритмы, где порядок не имеет U> значения... >> Так помножь результат на количество перестановок из K элементов ;-) А еще >> лучше возми формулу и выполни умножение и сокращение ;-) U> Да мне не количество нужно, а сами варианты! Вот вроде рабочий вариант. Сначала генерятся сочетания, а по ним размещения: {$A+,B-,D+,E+,F-,G+,I+,L+,N+,O-,P-,Q-,R-,S-,T-,V+,X+,Y+} {$M 16384,0,655360} var n,k: integer; a,o: array[0..10] of byte; procedure init; begin assign(output, 'a.out'); rewrite(output); assign(input, 'a.in'); reset(input); read(n,k); close(input); end; procedure gen; var i,j,s: integer; begin a:= o; while true do begin for i:= 1 to k do write(a[i]); writeln; i:= k; j:= k; while(a[i]<a[i-1])do dec(i); while(a[j]<a[i-1])do dec(j); if i=1 then break; s:= a[i-1]; a[i-1]:= a[j]; a[j]:= s; for j:= 1 to (k-i+1)shr 1 do begin s:= a[i+j-1]; a[i+j-1]:= a[k-j+1]; a[k-j+1]:= s; end; end; end; procedure rec(p: integer); var i: integer; begin for i:= o[p-1]+1 to n-k+p do begin o[p]:= i; if p=k then gen else rec(p+1); end; end; procedure run; begin o[0]:= 0; rec(1); end; procedure done; begin close(output); end; begin init; run; done; end. np: Helloween - Save Us Искренне Ваш Sergey Politov --- WP/95 Rus 1.78 Релиз 1 Reg. * Origin: Metal Invaders. (2:5015/176.18) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39914d42c397.html, оценка из 5, голосов 10
|