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.