Текст подпрограммы и версий pa10i_c.zip |
Тексты тестовых примеров tpa10i_c.zip |
Генерация сочетаний Cnk из n целых чисел по k .
Пусть заданы целые числа 0, 1, 2, ..., n - 1. Подпрограмма pa10i_c формирует следующее по порядку сочетание из этих 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 .
int pa10i_c(integer *n, integer *k, integer *j)
Параметры
n, k - | заданные значения n и k соответственно, n ≥ 1, 1 ≤ k ≤ n; (тип: целый); |
j - | целый одномерный массив длины k, содержащий на входе предшествующее сочетание, а на выходе - следующее по порядку сочетание. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int j[3] = { 0,0,0 }; /* Local variables */ extern int pa10i_c(int *, int *, int *); static int i__, k, n; n = 5; k = 3; for (i__ = 1; i__ <= 10; ++i__) { pa10i_c(&n, &k, j); printf("\n %5i %5i %5i \n", j[0], j[1], j[2]); } return 0; } /* main */ Результаты: (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)