Текст подпрограммы и версий
pa10i_c.zip 
Тексты тестовых примеров
tpa10i_c.zip 

Подпрограмма:  pa10i_c

Назначение

Генерация сочетаний 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)