A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
xDJCx #437 A kuponos feladathoz a kísérletek szimulálására egy megoldás:
KUPON:=proc(n::posint)
local M,K,L,k,S1,S2,X,Xs,m;
M:=1000;# kiserletek szama
K:=20*n;# ennyi probalkozas legyen maximum egy kiserletben
S1:={$1..n};# 1..n-ig az egeszek halmaza
L:=Array(1..M):
use Statistics in
X:=RandomVariable(DiscreteUniform(1, n)):
randomize();
for k from 1 to M do # M db kiserlet
S2:={};Xs:=convert(Sample(X,K),list);
for m from 1 to K do
S2:=S2 union {floor(Xs[m])};# tipsukonverzio miatt a floor
if m=K then lprint("Kevés a probalkozasok száma!");end if;
if S1 subset S2 then L[k]:=m:
#lprint(k,m,Xs[1..m]):
;break: # ha 1..n-ig megvannak a szamok megall a kiserlet
end if:
end do:
end do:
Mean(L),min(L),max(L);
end use:
end proc;
Például n=5-re:
KUPON(5); # átlagot, min., maxot ír ki.
A #lprint(k,m,Xs[1..m]): sor helyére lprint(k,m,Xs[1..m]): -et írva, kiírja az összes kísérlet eredményét.