De kans om bij een Lottotrekking van \(m\) cijfers uit \(n\) er exact \(k\) juist te hebben (wanneer je zelf precies \(m\) cijfers kan aanduiden) wordt gegeven door de formule:
\[{{m}\choose{k}} \cdot {{n - m}\choose{m - k}} / {{n}\choose{m}}\]waarbij gebruik gemaakt wordt van drie binomiaalcoëfficiënten, die we als volgt kunnen definiëren:
\[{{k}\choose{i}} = \frac{k}{i} \cdot \frac{k - 1}{i - 1} \cdots \frac{k - i + 1}{1}\]Schrijf zelf een nieuwe klasse Lotto waarmee je je kansen kan berekenen. Deze klasse moet (minstens) de volgende methoden bezitten:
Een constructor die als parameters het totaal aantal getallen op een lottoformulier neemt en het aantal getallen dat er bij elke trekking wordt getrokken (dit is hetzelfde aantal dat je ook op je lottoformulier invult). Voor Belgïe zijn dit respectievelijk 45 en 6 (maar we willen deze klasse ook kunnen gebruiken op de internationale markt).
Een methode binom met twee parameters, die de binomiaalcoëfficiënt van die twee getallen berekent. Test deze methode eerst goed uit vooraleer je verder doet. Er zijn hier een aantal addertjes onder het gras:
De methode moet werken op gehele getallen en een geheel resultaat geven.
Gehele delingen in Java ronden altijd naar beneden af: dus \(7 / 4\) is \(1\) en niet \(1.75\).
De teller in de formule voor de binomiaalcoëfficiënt wordt heel vlug veel te groot om in een ‘int’ te passen (of zelfs in een ‘long’).
Je zal met andere woorden je wiskundig vernuft nodig hebben om dit deel van de opgave tot een goed einde te brengen. De kunst is om de nodige delingen en vermenigvuldigingen in de juiste volgorde uit te voeren.
Een methode kans met één parameter, die de ‘kans’ terug geeft om het opgegeven aantal cijfers juist te hebben (volgens bovenstaande formule). Is de kans ‘1 op 25.41’, dan moet deze methode 25.41 terug geven en niet 0.03936.