Текст подпрограммы и версий 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)