22. november 2004 - 17:03
Der er
11 kommentarer og 1 løsning
Udregning af odds systemer
Når man odds'er kan man vælge at lave system odds. Foreksempel kan man spille system: "2/3" Hvilke betyder at man skal have 2 rigtige ud af 3 kampe for at få gevinst. Får man netop 2 rigtige er det nemt at udregne gevinst, da det bare er odds1*odds2*indsats=gevindst. Men hvis man har 3 rigtige skal man finde alle muligheder for at få 2 rigtige, og lægge dem sammen: (odds1*odds2 + odds1*odds3 + odds2*odds3) * indsats = gevinst. Dette er jo nemt nok, når der ikke er så mange.. Men hvis man foreksempel spiller system "3/6" så er der 20 mulige kombinationer af 3 rigtige ud af 6. Jeg ønsker en funktion der kan returnere resultatet: funktion udregnGevinst($arrayOdds,$systemA,$systemB){ ... } $systemA = 3 //system "3/6" $systemB = 6 $arrayOdds[] = 1.3 $arrayOdds[] = 2.5 $arrayOdds[] = 3.4 $arrayOdds[] = 4.3 $arrayOdds[] = 5.2 $arrayOdds[] = 6.1 echo udregnGevinst($arrayOdds,$systemA,$systemB);
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
22. november 2004 - 20:37
#1
hehehe sjov opgave, måtte lige have fat i en algoritmebog, da lige var lidt fjernt - Oven i det synes jeg ikke lige jeg kunne få eksemplet til at virke helt - men denne burde virke :) Bemærk at du skal multiplicere det som funktionen returnerer med din indsats... <?php class nkComb { var $numLeft; var $total; var $n; var $k; var $subset; function nkComb( $n, $k ) { $this->n = $n; $this->k = $k; $nF = $this->fact( $n ); $kF = $this->fact( $k ); $nmkF = $this->fact( $n - $k ); $this->total = $nF / ( $kF * $nmkF ); $this->subset = array(); for ( $i = 0; $i < $k; $i++ ) { $this->subset[0][ $i ] = $i; } $this->numLeft = $this->total - 1; while ( $this->getCombination() ) ; } function getIndexMatrix() { return $this->subset; } function fact( $n ) { $f = 1; for ( $i = $n; $i > 1; $i-- ) { $f *= $i; } return $f; } function getCombination() { if ( $this->numLeft == $this->total ) { $this->numleft--; } else { $nCur = count( $this->subset ) - 1; $curSubset = $this->subset[ $nCur ]; $x = $this->k - 1; while ( $curSubset[ $x ] == $this->n - $this->k + $x ) { $x--; } $curSubset[ $x ]++; for ( $y = ( $x + 1 ); $y < $this->k; $y++ ) { $curSubset[ $y ] = $curSubset[ $x ] + $y - $x; } $this->subset[ $nCur + 1 ] = $curSubset; $this->numLeft--; } return $this->numLeft != 0; } } function udregnGevinst( $oddsArray, $k, $n ) { $comb = new nkComb( $n, $k ); $matrix = $comb->getIndexMatrix(); $n = count( $matrix ); $total = 0; for ( $i = 0; $i < $n; $i++ ) { $mul = 1; for ( $j = 0; $j < $k; $j++ ) { $mul *= $matrix[ $i ][ $j ]; } $total += $mul; } return $total; } $systemA = 3; //system "3/6" $systemB = 6; $arrayOdds[] = 1.3; $arrayOdds[] = 2.5; $arrayOdds[] = 3.4; $arrayOdds[] = 4.3; $arrayOdds[] = 5.2; $arrayOdds[] = 6.1; echo udregnGevinst( $arrayOdds, $systemA, $systemB ); ?>
22. november 2004 - 20:42
#2
Tester den lige. og vender tilbage... uhh det er spændende!
22. november 2004 - 22:23
#3
Hvis du undrer dig over at det ikke virker, er det fordi jeg har glemt noget ;) $mul *= $matrix[ $i ][ $j ]; Skulle selvfølgelig være: $mul *= $oddsArray[ $matrix[ $i ][ $j ] ]; Det faldt mig ind mens jeg sad og læste "The Da Vinci Code" i Metro'en på vej hjem :P
22. november 2004 - 23:03
#4
Ja, det faldt mig godt nok ind at der var et eller andet galt.. da jeg prøvede at analysere din metode.. Man kan også bruge metoden gmp_fact(int a) til fakultet. Jeg kigger videre på det, med stor facination.
22. november 2004 - 23:06
#5
Ja, hvis du har kompileret gmp med ind i php ;)
22. november 2004 - 23:08
#6
Du kan undersøge om den har fået alle permutationer med ved i mellem disse to liner: $matrix = $comb->getIndexMatrix(); $n = count( $matrix ); At indsætte: $matrix = $comb->getIndexMatrix(); echo "<pre>"; var_dump( $matrix ); echo "</pre>"; $n = count( $matrix ); Den skulle gerne give dig en pæn oversigt over $arrayOdds indekser...
24. november 2004 - 16:55
#7
Dette script er simpelthen genialt!!! Det virker præcis som det skal, og i alle de tilfælde jeg kunnet komme på. Du har reddet projektet, som jeg ellers var ved at give op. Tak for det.
24. november 2004 - 17:06
#8
Det var så lidt :) Jeg kom til at bruge lidt mere tid på det end jeg havde forventet, men det er nu sjovt med lidt udfordring en gang imellem ;)
24. november 2004 - 17:21
#9
Ja, det kan jeg se. Og du må endelig sige til hvis jeg kan gøre noget til gengæld. Du har som sagt redet min dag/uge, så det er da en flot præstation!
24. november 2004 - 18:51
#10
Det er helt ok, glad for at du kunne bruge det :)
25. november 2004 - 00:38
#12
Vi tilbyder markedets bedste kurser inden for webudvikling