PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 15 unterschiedliche Zufallszahlen


BlackBox
09.03.2004, 14:56:47
Hallo,

ich möchte nen Script basteln welches mir 15 unterschiedliche Zufallszahlen ausgibt, der Bereich in dem die Zufallszahlen gezogen werden ist unterschiedlich (soll über nen Formular eingegeben werden)

das Problem ist mit jeder Zahl muss ich alle vorher gezogenen Zahlen checken ob die nicht schon dran war, das wird nen superlanger Quelltext wenn ich das 15 mal mit der While-Bedingung mache. ich habe das mal so angefangen aber bei 4 aufgehört (siehe unten)


srand((double)microtime()*1000000);
$zufall[1]= rand(1,$anzahl);
$zufall[2]= rand(1,$anzahl);
while($zufall[2]==$zufall[1]) $zufall[2]= rand(1,$anzahl);
$zufall[3]= rand(1,$anzahl);
while($zufall[3]==$zufall[1] || $zufall[3]==$zufall[2]) $zufall[3]= rand(1,$anzahl);
$zufall[4]= rand(1,$anzahl);
while($zufall[4]==$zufall[1] || $zufall[4]==$zufall[2] || $zufall[4]==$zufall[3]) $zufall[4]= rand(1,$anzahl);
for ($i=1;$i<=15;$i++)
echo $zufall[$i]."<br>";


ich wäre dankbar wenn jemand ne Idee hat, ich dachte vielleicht daran die Bedingung für die While-Schleife in eine Stringvariable zu packen und das ganze dann immer mehr aufzubauen, aber hab irgendwie auch keinen Ansatz gefunden.

Ich hoffe es hat einer ne Idee für mich!

Danke schonmal

Ken
09.03.2004, 15:10:35
Ich würd das eigentlich so lösen:

srand((double)microtime()*1000000);
for ($i=0;$i<15;$i++)
{
$zufall[$i] = rand(1,$anzahl);
for ($j=0;$j<$i;$j++)
{
if ($zufall[$i] == $zufall[$j])
{
$zufall[$i] = rand(1, $anzahl);
$j=-1; // -1, da das Ende der Schleife, wo $j++ erst noch kommt.
}
}
}

Kann sein, dass da noch etwas nicht stimmt, ich bin zur Zeit nicht auf ganzer Programmiererleistung.

BlackBox
09.03.2004, 18:45:53
war auch ne super Idee hab aber grad bevor ich dein's gelesen habe nen Script im Netz gefunden, das ist auch super! Das läuft nach dem Prinzip packe alles in ein Array und das was gezogen wurde wird einfach rausgelöscht, Code siehe unten

function generate_numbers($min, $max, $anz)
{
$array = range($min, $max);
srand ((double)microtime()*1000000);
for($x = 0; $x < $anz; $x++)
{
$i = rand(1, count($array))-1;
$erg[] = $array[$i];
array_splice($array, $i, 1);
}
return $erg;
}

$zufalls_array = generate_numbers(1, $anzahl, 15);



Danke trotzdem