Alle Zahlen ohne doppelte - 1234 bis 4321



  • Hi

    Ich habe für meine Mutter ein art magisches Quadrat am PC lösen wollen und dazu alle Zahlen von 1-9 in allen möglichen Kombinationen gebraucht, ohne das eine Ziffer doppelt vorkommt.

    Gelöst habe ich das ganze recht aufwendig:

    for( int i = 0; i < 10; i++){
      for(int j = 0; j < 10; j++){
        if(i==j) continue;
        for(int k = 0; k < 10; k++){
          if(k==j||k==i) continue;
    usw.
    

    Das wird aber bei 9 verschiedenen Zahlen ziemlich hässlich.

    Eine Alternative ist mir noch eingefallen, "einfach" eine Schleife von 0 bis 999999999 laufen lassen und ueberprüfen ob eine Ziffer doppelt vorkommt, aber wirklich schön finde ich auch das nicht, für 9 stellige Zahlen ist das aber durchaus noch machbar.

    Hat jemand eine Idee wie das schöner gehen könnte?

    Danke schonmal

    Gruss


  • Mod

    Da dürfte was mit Backtracking gehen:
    http://en.wikipedia.org/wiki/Backtracking



  • Gehts dir erstmal nur um die Permutationen von [1, 2, 3, 4, 5, 6, 7, 8, 9]? Siehe std::next_permutation.

    Edit: Für das Lösen deines Problems solltest du dich dann allerdings an SeppJs Vorschlag halten.


Anmelden zum Antworten