Permutation



  • hallo alle zusammen. Ich hab mal eine Frage an euch. ich verzweifel gerade daran einen Algorithmus zu finden der mir für eine Zahlenreihe von 0-9 alle möglichen Permutationen ausgibt.
    Kann mir jemand helfen ! BITTE ist meien Projektarbeit und ohne das klappt mein Prog net !!! DANK



  • KVLManiac schrieb:

    Kann mir jemand helfen !

    Ja.



  • kannst du mir dann auch bitte helfen? Das wäre supe rnet von dir !!! DANKE



  • Ja. Das könnte ich. Ich könnte dir auch eine einfache Lösung posten. Wenn ich anderer Leute Hausaufgaben machen würde. Will ich aber nicht.

    Wo hakt es denn genau? Was hast du schon porbiert? Kannst du alle Permutationen
    auf dem Papier hinschreiben (z.B. für {0,1,2,3})? Wie sicher bist du dir, dass du wirklich alle Permutationen brauchst?



  • KVLManiac schrieb:

    Kann mir jemand helfen ! BITTE ist meien Projektarbeit und ohne das klappt mein Prog net !!! DANK

    http://www.c-plusplus.net/forum/viewtopic.php?t=84995



  • Taurin schrieb:

    Kannst du alle Permutationen auf dem Papier hinschreiben (z.B. für {0,1,2,3})?

    ja ich kann alle permutationen hinschreiben ! Aber ich weiss einfach nicht wie ich das in einen algorithmus packen kann. Gibt mir doch mal bitte einen Tipp. DANKE



  • Hi,

    du willst also, das sich jede ziffer des dezimal-systems mit jeder ziffer "beruehrt"?

    -dann nimm x=0,j=0. laufe 10 mal durch und erhöhe j++.
    -dann erhöhe x++ und laufe wieder 10 mal durch mit j++.

    da die beschreibung des algorithmus ziemlich unpräzise ist und ich
    noch nicht gelernt habe, einen algorithmus sauber zu formulieren,
    bleibt mir nur übrig, den code zu posten:

    #include <stdio.h>
    
    int main(){
    
    	int i,j;
            int array[100][2];
    
    	for (i=0;i<10;i++) 
    		for (j=0;j<10;j++) {
                          printf("%d%d\n", i, j);
    
                     array[i*10+j][0]=i; //EDIT: zahlen in ein array schreiben
    		         array[i*10+j][1]=j;
                    }
    
        return 0;
    }
    

    das ist doch, was du wolltest, oder? 😕

    b4sh0r



  • KVLManiac schrieb:

    ja ich kann alle permutationen hinschreiben ! Aber ich weiss einfach nicht wie ich das in einen algorithmus packen kann. Gibt mir doch mal bitte einen Tipp. DANKE

    Was für ein System hast du dabei benutzt? Wenn du herausfindest, bist du schon
    ein ganzes Stück weiter. Wenn ich das nicht könnte, könnte ich auch kein Programm schreiben. Und vielleicht noch mal ein kleiner Tipp: Rekursionen sind für
    häufig sowas toll.

    btw.: Hast du den Link durchgelesen? Da steht schon die halbe Lösung drin.

    Und noch ein Frage: Weißt du, wie viele Permutationen von {0..9} existieren? Was willst du mit denen machen?

    Bisher hast du noch nicht viel Eigeninitiative gezeigt. Willst du, dass ich dir die Funktion schreibe? Dann geb ich dir meine Kontonummer. Über 50 Euro ließeb sich reden....

    Edit: bash0R, du gibtst die Zahlen 00-99 aus, das sind keine Permutationen.



  • #include <stdio.h>
    #include <stdlib.h>
    
    static void print_perms_aux(char *alphabet,
                                size_t len,
                                char *stack,
                                size_t have) {
      size_t i;
    
      if(len == have)
        (void) puts(stack);
      else
        for(i = 0; i < len; ++i)
          if(alphabet[i] != '\0') {
            stack[have] = alphabet[i];
            alphabet[i] = '\0';
            print_perms_aux(alphabet, len, stack, have + 1);
            alphabet[i] = stack[have];
          }
    }
    
    static void print_perms(char *alphabet, size_t len) {
      char *alpha = (char *) malloc(len + 1);
      char *stack = (char *) malloc(len + 1);
    
      if(alpha == NULL || stack == NULL)
        fprintf(stderr, "malloc failed!\n");
      else {
        strncpy(alpha, alphabet, len);
        stack[len] = '\0';
    
        print_perms_aux(alpha, len, stack, 0);
      }
    
      free(alpha);
      free(stack);
    }
    
    int main(void) {
      print_perms("0123456789", 10);
      return 0;
    }
    


  • danke an alle die mir geantwortet haben. ich hab es mit dem Tips jetzt hinbekommen. Cool schönen tag noch !


Anmelden zum Antworten