algorithme pour la génération de nombre de combinaisons sans répétition

J'ai vérifié presque chaque poste similaire ici, mais je ne pouvais pas comprendre comment je peux faire ce que je veux. Ce que j'essaie d'en donner une entrée dans un programme C, disons nombre de 4, et le programme de retour de la suite des nombres dans un tableau:

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

Pour être plus clair:
Si le nombre d'entrée est 4 alors je veux utiliser les chiffres de 1 à 4 et de générer toutes les combinaisons possibles de chiffres(de 1 chiffres combinaisons à 4 chiffres combinaisons) sans chiffre de répétitions.

J'ai essayé le code suivant:

#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;
}

Le programme ci-dessus imprime le résultat. Je veux obtenir le résultat en quelque sorte.. mais je ne peux pas parce que le code ci-dessus imprime le résultat d'une étrange manière.

Et votre question est ... ?
Vous tentez d'afficher une sorte de permutation de l'entrée d'origine? Votre question n'est pas très claire.
Je fixe la sortie et j'ai ajouté une meilleure explication
Ah, si vous essayez de modifier le programme que vous avez trouvé sur compprog.wordpress.com/2007/10/17/generating-combinations-1 pour mettre le résultat dans un tableau au lieu de la sortie standard stdout?
C'est le droit.Et c'est parce que j'ai essayé tout ce que je pouvais penser..

OriginalL'auteur Dchris | 2013-04-26