diff options
Diffstat (limited to 'alg_l.c')
-rw-r--r-- | alg_l.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -0,0 +1,41 @@ +#include <stdlib.h> +#include <assert.h> +#include <stdio.h> + +int main(int argv, char **argc) { + if (argv < 3) { + assert(argv > 0); + printf("Usage: %s [n] [t]\n", argc[0]); + return -1; + } + + size_t n = atoi(argc[1]), + t = atoi(argc[2]); + + size_t *c = calloc(t + 3, sizeof(*c)); + +L1_initialize: + for (size_t j = 1; j <= t; j++) + c[j] = j - 1; + c[t + 1] = n; + c[t + 2] = 0; + +L2_visit: + for (size_t j = t; j >= 1; j--) + printf("%lu ", c[j]); + printf("\n"); + +L3_find_j: + size_t j = 1; + while (c[j] + 1 == c[j + 1]) { + c[j] = j - 1; + j = j + 1; + } + +L4_maybe_done: + if (j > t) return 0; + +L5_increase_c_j: + c[j] = c[j] + 1; + goto L2_visit; +} |