- 論壇徽章:
- 0
|
royalzhang老大的程序:
#!/usr/bin/perl
use strict;
my %hash=(
'001'=>'張三',
'002'=>'李四',
'003'=>'王五',
'004'=>'劉六',
'005'=>'陳七',
);
my @pool=keys %hash;
my $i = @pool; # $i是數(shù)組的長(zhǎng)度
for(@pool){
print "Press ENTER key to continue!\nEnter 'exit' to exit the programme\n";
exit if <>=~/exit/i;
my $n; #存放隨機(jī)數(shù)
my $n = rand($i--);
print $pool[$n],": ",$hash{$pool[$n]}," win!\n";
$pool[$n] = $pool[$i];
}
print "Over! press Enter to exit!";
<>;
|
-------該程序滿足我的抽簽要求(一個(gè)學(xué)期內(nèi),讓每個(gè)學(xué)生都有且僅有一次機(jī)會(huì)做即興演,直到50名學(xué)生輪回完畢,此為一輪抽簽。然后進(jìn)行第2輪....每輪抽簽的結(jié)果都是隨機(jī)產(chǎn)生的)。
-------對(duì)該程序,偶有點(diǎn)不太明白:$pool[$n] = $pool[$i];該句的意思是將隨機(jī)抽到的ID用最后一個(gè)ID替換。當(dāng)$i--=5時(shí),$n有可能隨機(jī)恰好等于4,$i減一,此時(shí)$i=4,$ pool[$n]和$pool[$i]均等于005,也就是用005替換005,替換后005號(hào)依然存在@pool中,該輪中,005還會(huì)參加抽簽,那如何保證005不會(huì)兩次或多次被抽中呢?
-------我上面的分析哪里出了問(wèn)題阿?小弟好糊涂阿,請(qǐng)老大耐心指點(diǎn),感激不盡!謝謝!
[ 本帖最后由 windows.li 于 2007-12-12 16:22 編輯 ] |
|