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