Algoritmo para generar combinaciones numéricas sin repetición.

Revisé casi todas las publicaciones similares aquí, pero no pude averiguar cómo puedo hacer lo que quiero. Lo que estoy intentando es dar una entrada en un programa en C, digamos el número 4, y el programa devuelve los siguientes números en una matriz:

1
2
3
4
12
13
14
23
24
34
123
134
124
1234

Para ser más claros: si el número de entrada es 4, entonces quiero usar los dígitos 1-4 y generar todas las combinaciones posibles de dígitos (desde combinaciones de 1 dígito a combinaciones de 4 dígitos) sin repeticiones de dígitos.

Probé el siguiente código:

#include <stdio.h>

/* Prints out a combination like {1, 2} */
void printc(int comb[], int k) {
    printf("{");
    int i;
    for (i = 0; i < k; ++i)
        printf("%d, ", comb[i] + 1);
    printf("\\b\\b}\\n");
}


    int next_comb(int comb[], int k, int n) {
    int i = k - 1;
    ++comb[i];
    while ((i >= 0) && (comb[i] >= n - k + 1 + i)) {
        --i;
        ++comb[i];
    }

    if (comb[0] > n - k) /* Combination (n-k, n-k+1, ..., n) reached */
        return 0; /* No more combinations can be generated */

    /* comb now looks like (..., x, n, n, n, ..., n).
    Turn it into (..., x, x + 1, x + 2, ...) */
    for (i = i + 1; i < k; ++i)
        comb[i] = comb[i - 1] + 1;

    return 1;
}

int main(int argc, char *argv[]) {
    int n = 5; /* The size of the set; for {1, 2, 3, 4} it's 4 */
    int k = 3; /* The size of the subsets; for {1, 2}, {1, 3}, ... it's 2 */
    int comb[16]; /* comb[i] is the index of the i-th element in the
            combination */

    /* Setup comb for the initial combination */
    int i;
    for (i = 0; i < k; ++i)
        comb[i] = i;

    /* Print the first combination */
    printc(comb, k);

    /* Generate and print all the other combinations */
    while (next_comb(comb, k, n))
        printc(comb, k);

    return 0;
}

El programa anterior imprime el resultado. Quiero obtener el resultado de alguna manera ... pero no puedo porque el código anterior imprime el resultado de una manera extraña.

Respuestas a la pregunta(2)

Su respuesta a la pregunta