zufallszahl aus zahlenpool

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • zufallszahl aus zahlenpool

    hi !

    nach einigenverunglückten Versuchen die sich nicht lohnen würden hier reinzustellen muss ich doch mal fragen

    ich habe mehrere Zahlen, undjede existiet nur einmal.
    jetzt möchte ich zufallsgesteuert sagen wir 4 zahlenauslesen wobei keine der zahlen 2 mal vorkommen darf !

    ...wie könnte man sowas machen ? ich komm einfach nicht drauf....

  • #2
    Hi,
    Du lässt eine Schleife bis x laufen und lässt Dir eine Zufallszahl erstellen, welche Du dann in ein Array einfügst.
    Bei jedem Schleifendurchlauf überprüfst Du mit in_array(), ob die Zahl schon im Array der x Zufallszahlen enthalten ist. Ist das nicht der Fall wird die Schleife fortgesetzt. Ist das der Fall, so muss eine neue Zahl gezogen werden.

    Das müsstest Du jetzt mal umsetzen.

    Grüße Ben.
    Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

    Comment


    • #3
      wobei keine der zahlen 2 mal vorkommen darf !
      Aber das Prinzip ist natürlich nicht so falsch...

      Comment


      • #4
        ich denke das ist zu speicherlastig wennich auf gut glück zahlen erzeugen lasse denn angenommen ich hätte nur 5 zahlen dann hat erbeieiner guten zufallsfunktion zigtausend wete die nicht stimmen !
        ich suche eben nach einer funktion der ich ein array zuwerfe und diese dann 4 zufällig gewählte zahlenausspuckt oder so.

        Comment


        • #5
          Hier ein kleines Beispiel. Sollte selbsterklärend sein
          PHP Code:
          <?php

              $anzahlZufallszahlen 
          4;
              
          $zufallszahlen = array();
              
              for(
          $i 0$i $anzahlZufallszahlen$i++) {
                  
          $zahl rand(0,10);
                  
                  if(
          in_array($zahl$zufallszahlen)) {
                      ++
          $anzahlZufallszahlen;
                      continue;
                  }
                  
                  
          $zufallszahlen[] = $zahl;
              }

              echo 
          '<pre>';
              
          var_dump($zufallszahlen);
              echo 
          '</pre>';
             
          ?>
          Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

          Comment


          • #6
            BenOmania, auch wenn dein Beispiel richtig ist, würde ich vom logischen Ablauf den Increment verändern und nicht den maximal Wert der for-Schleife.
            PHP Code:
            //aus:
            ++$anzahlZufallszahlen;
            //wird:
            $i--; 

            Comment


            • #7
              ich würd eine von den zwei möchlichteiten verwenden

              PHP Code:
              srand ((double) microtime() * 10000000);
              $rand array_rand($names4); 
              $rand ist dann ein Array mit 4 Werten die Zufällig gewählt sind,..

              würd aber auch gehen mit:

              PHP Code:
              srand ((double) microtime() * 10000000);
              $val1 rand(0999999); // zwischen 0 und 999999 wird eine Zahl gewählt
              $val2 rand(0999999);
              $val3 rand(0999999);
              $val4 rand(0999999); 

              Comment


              • #8
                greeez, wie schließt du in deinem bsp. duplikate aus?

                Comment


                • #9
                  Mal abgesehen von greeez Vorschlag ... bei dem ich zunächstmal davon ausgehe das duplicate von PHP selbst ausgeschlossen werden (nicht verifiziert) ... finde ich folgenden Ansatz schöner (zumal der den Satz "ich habe mehrere Zahlen, undjede existiet nur einmal." meiner Meinung nach besser berücksichtigt:
                  PHP Code:
                  <?php

                  $anzahlZufallszahlen 
                  4;
                  $zufallszahlen = array();
                  $zahlen = array(102030405060708090100);

                  while ( 
                  TRUE ) {
                      
                  $zahl rand(0count($zahlen) - 1);
                      
                      if ( !isset(
                  $zufallszahlen[$zahl]) ) {
                          
                  $zufallszahlen[$zahl] = $zahlen[$zahl];
                          if ( 
                  count($zufallszahlen) == $anzahlZufallszahlen ) break;
                      }
                      
                  }

                  echo 
                  "<pre>";
                  var_dumpy($zufallszahlen);
                  echo 
                  "</pre>";

                  ?>
                  Um einen Wert <= 0 für $anzahlZufallszahlen auszuschliessen könnte man jetzt auch noch anstatt
                  PHP Code:
                  while ( TRUE
                  ein
                  PHP Code:
                  while ( $anzahlZufallszahlen && $anzahlZufallszahlen count($zahlen) ) 
                  verwenden ...
                  Last edited by goth; 22-01-2006, 22:36.
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Comment


                  • #10
                    @reallife:
                    Jou, hast recht. Wäre vom logischen Ansatz besser.
                    Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

                    Comment


                    • #11
                      Original geschrieben von reallife
                      greeez, wie schließt du in deinem bsp. duplikate aus?
                      ok, sorry
                      das hier wär ein ansatz:

                      PHP Code:
                      <?php
                      $vals 
                      = array();
                      srand ((double) microtime() * 10000000);

                      do{
                            
                      $val rand(01000);
                            if(!
                      in_array($val,$vals)){
                                 
                      $vals[] = $val;
                            }
                      }while(
                      count($vals) <= 4);

                      var_dump($vals);
                      ?>
                      oder mit array_rand: (kann man am besten das realisieren mit vorgegebenen zahlen

                      PHP Code:
                      <?php
                      $nums 
                      = array(10,20,30,40,50);
                      $vals = array();

                      srand ((double) microtime() * 10000000);

                      do{
                            
                      $val array_rand($nums,1);
                            if(!
                      in_array($val,$vals)){
                                 
                      $vals[] = $val;
                            }
                      }while(
                      count($vals) <= 4);

                      var_dump($vals);
                      ?>
                      Last edited by greeez; 24-01-2006, 18:43.

                      Comment


                      • #12
                        Warum so kompliziert? Copy/Paste aus der Doku:
                        PHP Code:
                        <?php
                        $numbers 
                        range(120);
                        srand((float)microtime() * 1000000);
                        shuffle($numbers);
                        foreach (
                        $numbers as $number) {
                           echo 
                        "$number ";
                        }
                        ?>
                        Wenn man nur eine bestimmte Anzahl von Zahlen haben will, muss man doch nur noch die foreach-Schleife ändern.

                        PHP Code:
                        <?php
                        $numbers 
                        range(120);
                        srand((float)microtime() * 1000000);
                        shuffle($numbers);
                        for (
                        $i 0$i 4$i+)
                           echo 
                        $numbers[$i];
                        }
                        ?>
                        Gruß
                        Uwe

                        Comment

                        Working...
                        X