[Funktion] Zahl in zufällige Sumanden zerlegen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] Zahl in zufällige Sumanden zerlegen?

    Hi zusammen!
    Ich möchte für mein Programm eine Zahl in vier zufällige Summanden zerlegen. Im Moment habe ich einfach 4 zufällig generierte Zahlen, welche addiert aber nicht immer gleich viel ergeben. Eine nützliche Funktion konnte ich nirgends finden. Oder gibt es da doch etwas? Kann mir jemand weiterhelfen? Danke im Voraus

    Mein Code:
    PHP-Code:
    for($i=0;$i<5;$i++){
       
    $faehigkeit1mt_rand(1049)/10;
       
    $faehigkeit2mt_rand(1049)/10;
       
    $faehigkeit3mt_rand(1049)/10;
       
    $faehigkeit4mt_rand(1049)/10;

    //->Eintrag in DB


    Gruäss Schelä

  • #2
    PHP-Code:
    $summe = ???;
    mt_srand(); # für php < 4.2.0
    // Wert 1: es müssen noch drei Zahlen drauf, also max.Wert = Summe minus 3
    $op1 mt_rand(1$summe-3);
    $rest $summe $op1;
    // Wert 2: maximal Rest minus 2
    $op2 mt_rand(1$summe-2-$op1);
    $rest -= $op2;
    // drittens: maximal Rest minus 1
    $op3 mt_rand(1$summe-1-$op1-$op2);
    $rest -= $op3# danke @happy
    // und der Rest
    $op4 $rest
    Zuletzt geändert von Titus; 05.10.2004, 12:06.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      warum rechnest du nicht?
      PHP-Code:
      $gesamt $noch_uebrig 10;
      $anzahl 4;
      for (
      $i 1$i $anzahl$i++) {
        if (
      $noch_uebrig 0)
          
      $zahlen[] = mt_rand(1$noch_uebrig);
        else
          
      $zahlen[] = 0;
        
      $noch_uebrig -= end($zahlen);
      }
      $zahlen[] = $noch_uebrig;
      print_r($zahlen); 
      @Titus
      hab mal $summe = 10; gemacht und 4-1-4-5 rausbekommen, $rest -= $op3 fehlt
      Zuletzt geändert von mrhappiness; 05.10.2004, 11:54.
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Danke erstmal.
        Das Problem ist einfach, dass die Unterschiede zwischen den Zahlen so ziemlich gross sein können. Angenommen die Summe wäre 20 und die erste generierte zahl wird irgendwie 16, dann bleibt für die restlichen beinahe nichts mehr übrig.
        hmmm...ausser ich erhöhe natürlich die Zahl 3, dann könnte es funktionieren...

        Kommentar


        • #5
          @mrhappiness: Hab deine version auch mal probiert, habe aber zweimal nacheinander ein unbefriedigendes resultat bekommen. einmal 9-1-0-0 und einmal 5-2-3-0.
          die null sollte eigentlich vermieden werden...

          Kommentar


          • #6
            Nimm als Max für den ersten Wert doch die Hälfte der Summe oder so.

            Damit die erste nicht so häufig die größte Zahl ist, kannst du die vier noch in ein Array schreiben und dann mit shuffle verwürfeln.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              cool. jetzt gehts perfekt. ich hab 6, 4 und 2 von der summe 10 abgezogen un die zahlen sind jetzt ziemlich schön beieinander. danke!

              Kommentar

              Lädt...
              X