immer noch keine lösung!



  • Oder einfach zählen von 0 bis 47 und die Zahl jeweils in dieser speziellen Darstellung ausgeben. Eben nicht dezimal oder binär sondern "4223-är" und als Ziffern a-z benutzen.

    Bye, TGGC



  • bin noch nicht viel schlauer... wie ihr das genau meint!

    ich habe zum beispiel:
    strang 1: durchmesser 200/300/400/500
    strang 2: durchmesser 300/400
    strang 3: durchmesser 150/250
    strang 4: durchmesser 150/250/350
    strang n: ...

    mein ziel ist:
    komb. 1: 200-300-150-150
    komb. 2: 300-300-150-150
    komb. 3: 400-300-150-150
    komb. 4: 500-300-150-150
    komb. 5: 200-400-150-150
    komb. 6: 300-400-150-150
    komb. 7: usw.
    komb.48: 500-400-250-350

    wenn es immer genau die selbe anzahl stränge wäre, hätte ich kein problem das zu lösen... einfach z.B. 4 "for" schleifen... oder so...

    aber bei n strängen habe ich mein blackout... es soll sich immer nur ein durchmesser ändern... wieder zurückändern... ich weiss auch wieoft jeder durchmesser im einzelnen strang vorkommt... aber... die kombination mit den anderen strängen ist massgeblich... 🙂

    vielleicht könnt ihr mir noch ein wenig weiterhelfen...



  • Wenn du noch ein bisschen die Indices in Volkards Code heil machst und dir dann ne print-Funktion schreibst, ist doch alles gut:

    void print(int* combo)
    {
      int strang1[4] = {200,300,400,500};
      int strang2[2] = {300,400};
      int strang3[3] = {150,250};
      int strang4[4] = {150,250,350};
      std::cout << strang1[combo[0]] << " / " << strang2[combo[1]] << " / "
                << strang3[combo[2]] << " / " << strang4[combo[3]] << "\n";
    }
    
    int main()
    {
      int max[5]=  {3,1,1,2,   1};
      int combo[5]={0,0,0,0,   0};
    
      do{ 
        print(combo);
        int i=0;
        while(combo[i]==max[i]){
           combo[i]=0;
           ++i;
        }
        ++combo[i];
      }while(combo[4]==0);
    }
    


  • aber das ergibt doch nur 4+2+2+3 = 11 kombinationen!

    im ganzen sind aber 4*2*2*3 kombinationen möglich...

    oder habe ich einen knick in meiner batery ???



  • theVOICE schrieb:

    aber das ergibt doch nur 4+2+2+3 = 11 kombinationen!
    im ganzen sind aber 4*2*2*3 kombinationen möglich...
    oder habe ich einen knick in meiner batery ???

    kennste noch die alten kilometerzähler mit den rädchen?
    so einer fängt an bei
    000
    macht dann
    001
    und dann
    002
    usw.
    also das rechte rädchen läuft einfach. es hat nen haken, der beim umschlag von der 9 auf die 0 das nächste rädchen, (was auf dieser seite 10 haken hat) um eins weiterschaltet.
    also
    008
    009
    //jetzt hächen und mitnahme!
    010
    011
    012
    ...

    und das hab ich versucht, nachzuprogrammieren.
    beispiel:
    6537819999
    mein code sagt:
    653781999(9)
    i=letzes rad. solange da ne 9 ist, mach ne 0 draus und geh ein rad weiter.
    65378199(9)0
    6537819(9)00
    653781(9)000
    65378(1)0000
    ah, keine 9 mehr.
    dann einfach weiterschalten.
    65378(2)0000

    und zum abbrechen des ganzen hab ich ein detektorrad ganz links angeschraubt.
    0-65378(2)0000
    wenn die ganz linke 0 zu ner 1 wird, ist der kiometerzähler einmal ganz durchgelaufen.

    das hab ich dann noch aufgemeotzt mit einem zusatz-array, was sagt, wie groß die einzelnen rädchen sind, es sollen ja nicht alle 10 ziffern haben, sindern auch mal 2 oder 3 oder 4 ziffern.



  • volkard schrieb:

    und das hab ich versucht, nachzuprogrammieren.
    beispiel:
    6537819999
    mein code sagt:
    653781999(9)
    i=letzes rad. solange da ne 9 ist, mach ne 0 draus und geh ein rad weiter.
    65378199(9)0
    6537819(9)00
    653781(9)000
    65378(1)0000
    ah, keine 9 mehr.
    dann einfach weiterschalten.
    65378(2)0000

    wenn ich das aber so verstehe dann wird aus der zahl die einmal eine null geworden ist nie wieder eine 2, 3, 4, 5,... alle zahlen sind schlussendlich nullen... das ergibt in summe nicht alle kombinationen... da sich eigentlich immer nur das erste rädchen drehen soll und die anderen in kombination weiterschiebt... der ansatz hilft mir weiter... ...
    ich werde das jetzt mal versuchen...



  • Lass doch mal den Code oben laufen und schau dir mit nem Debugger an, was da passiert. Dann verstehst du es vielleicht besser.



  • Hast du mein Beispiel denn mal ausprobiert:

    n ist die Anzahl der Rohre
    m[a] = die möglichen Stärken von Rohr a
    s[a] = aktuelle gewählte Stärke

    int all = 1;
    for (int a=0; a<n; ++a)
    {
      s[a] = 0;
      all *= m[a];
    }
    
    for (int i=0; i<all; ++i)
    {
      int tmp = 1;
      for (a=n-1; a>=0; --a)
      {
        if ((i % tmp) == 0)
        {
          ++s[a];
          if (s[a] > m[a]) s[a] = 1;
        }
        tmp *= m[a];
      }
    
      // Hier kannst du in der Matrix speichern
    }
    

    Ich hab da auch zum Testen mal ein Programm geschrieben und bekomm folgende Ausgabe:

    1 1 1 1
    1 1 1 2
    1 1 1 3
    1 1 2 1
    1 1 2 2
    ...
    4 2 2 2
    4 2 2 3

    sowas suchst du doch, oder??



  • theVOICE schrieb:

    wenn ich das aber so verstehe dann wird aus der zahl die einmal eine null geworden ist nie wieder eine 2, 3, 4, 5,...

    doch.

    alle zahlen sind schlussendlich nullen...

    nö.

    das ergibt in summe nicht alle kombinationen...

    doch.

    da sich eigentlich immer nur das erste rädchen drehen soll und die anderen in kombination weiterschiebt...

    jo, so in etwa.

    der ansatz hilft mir weiter... ...

    ok.

    ich werde das jetzt mal versuchen...

    lass vorher taurins programm laufen. du sagst, es würde falsche ergebnisse leifern. dafür ist taurin nicht bekannt. zeig erst mal die fehlausgabe seines programms. vorher glaub ich nicht an nen fehler.



  • hi leute...

    dank euren anregungen habe ich jetzt die lösung... konnte zuerst eure codes nur nicht ganz genau nachvollziehen...

    danke euch...
    ihr habt mir irrsinnig weitergeholfen...

    bis demnächst mal wieder!


Anmelden zum Antworten