|
Текст подпрограммы и версий pa10i_p.zip |
Тексты тестовых примеров tpa10i_p.zip |
Генерация сочетаний Cnk из n целых чисел по k .
Пусть заданы целые числа 0, 1, 2, ..., n - 1. Подпрограмма PA10I формирует следующее по порядку сочетание из этих n целых чисел по k, 1 ≤ k ≤ n, если задано предшествующее сочетание. Новое сочетание помещается в одномерном целом массиве J длины k таким образом, что его компоненты J (1), J (2), ..., J (k) содержат целые числа в пределах от 0 до n - 1 в виде монотонной строго возрастающей последовательности.
На входе в подпрограмму предшествующее сочетание задается в массиве J также в виде монотонной строго возрастающей последовательности. Если массив J задать нулевым, то в качестве первого сочетания будет получено n - k, ..., n - 1. Это же начальное сочетание получится и после выходного сочетания 0, 1, ...., n - k, которое всегда является последним в циклическом процессе генерации всех возможных сочетаний из n по k .
procedure PA10I(N :Integer; K :Integer; var J :Array of Integer);
Параметры
| N, K - | заданные значения n и k соответственно, n ≥ 1, 1 ≤ k ≤ n (тип: целый); |
| J - | целый одномерный массив длины K, содержащий на входе предшествующее сочетание, а на выходе - следующее по порядку сочетание. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tpa10i_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, PA10I_p;
function tpa10i: String;
implementation
function tpa10i: String;
var
N,K,I,_i :Integer;
const
J :Array [0..2] of Integer = ( 0,0,0 );
label
_10;
begin
Result := '';
N := 5;
K := 3;
for I:=1 to 10 do
begin
PA10I(N,K,J);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%3d',[J[_i]]);
if ( ((_i+1) mod 1)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
_10:
end;
UtRes('tpa10i',Result); { вывод результатов в файл tpa10i.res }
exit;
end;
end.
Результаты:
(2, 3, 4); (1, 3, 4); (0, 3, 4); (1, 2, 4);
(0, 2, 4); (0, 1, 4); (1, 2, 3); (0, 2, 3);
(0, 1, 3); (0, 1, 2)