Algorithmus für die Generierung von Zahl-Kombinationen ohne Wiederholung

Habe ich überprüft, fast alle ähnlichen Beitrag hier, aber ich konnte nicht herausfinden, wie ich das tun kann, was ich will. Was ich versuche zu geben, ist eine Eingabe in ein C-Programm, sagen wir der Nummer 4, und das Programm zurückgeben die folgenden zahlen in einem array:

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

Um deutlicher zu sein:
Wenn die Eingabe-Zahl 4, dann will ich mit Ziffern 1-4 und generieren alle möglichen Kombinationen von Ziffern(von 1-stellige Kombinationen zu 4-stellige Kombinationen) ohne Ziffer Wiederholungen.

Habe ich versucht den folgenden code:

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

Dem oben genannten Programm druckt das Ergebnis. Ich möchte das Ergebnis irgendwie.. aber ich kann nicht, weil der obige code druckt das Ergebnis in eine seltsame Art und Weise.

Und deine Frage ... ?
Sie werden versuchen zu zeigen, eine Art der permutation der ursprünglichen Eingabe? Deine Frage ist nicht sehr klar.
Ich reparierte die Ausgabe, und ich habe eine bessere Erklärung
Ah, du bist also versucht zu ändern das Programm, das Sie gefunden auf compprog.wordpress.com/2007/10/17/generating-combinations-1, um seine Ausgabe in ein array statt stdout?
Das ist richtig.Und das ist, weil ich versuchte alles, was ich denken konnte..

InformationsquelleAutor Dchris | 2013-04-26

Schreibe einen Kommentar