Jörk Behrends: srand()

Beitrag lesen

Hallo!

P.S. Uebrigens, Daniel's Problem war eigentlich, alle 20 Zahlen unterschiedlich zu halten.

Genau.
Eine Lösung hierzu wäre in etwa folgendes:

for (my $i=0; $i<$anzahl_werte; $i++) {
   my $temp = int(rand($max_rand)) while ($hash{$temp});
   $hash{$temp} = 1;
   $array[$i] = $temp;
}

Anschließend hat man $anzahl_werte paarweise verschiedene Zufallszahlen in @array. Problem: Je höher die Anzahl der Werte und je enger der Zahlenbereich, desto länger (exponential) dauert es.

Eine Variante hierfür wäre z.B. die Möglichen Zahlen in einem Array zu halten, und dort dann per Zufall eine Rauszuangeln. Per nächsten mal ist das Array dann um diese Zahl kleiner ...
-----------------------------
my $max=20;
my $anz_werte=21;

my @zahlen;
@zahlen[0..$max]=(0..$max);

foreach $i (0..$anz_werte-1)
{
    my $temp = splice(@zahlen, int(rand($max+1-$i)), 1);
    push(@zahlen, $temp);
}

print join('-', splice(@zahlen, -$anz_werte));
-------------------------

Jörk