Kombinációk kiszámítása, hogyan?
Sziasztok!
Van egy feladat amiben ki kellene számolnom a különböző lottó típusok lehetséges számkombinációinak a számát. De van egy megkötés, hogy csak int32 adattípust használhatok.
C#-ról lenne szó, valaki tudna írni valamilyen ötletet?
N darab elemből kiválasztunk K darabot a sorrend figyelembe vétele nélkül, és ezeket - úgy, hogy egy elem csak egyszer szerepelhet - sorbarendezzük.
Ezen az elven indulj el. Deklarálsz egy tömböt, amiben a számokat tárolod (90 elemű tömb), majd ott megnézed, hogy hányszor tudsz 5 különböző számot kiválasztani, az X (a maximális lehetőségek száma (90)) elemű többől.
Nem kell tömb és semmi egyéb, mivel megadni nem kell őket.
Itt megtalálod a szükséges képleteket, csak implementálod őket és kész: [link]
Én vagyok az első válaszoló (meg az utolsó is), és gondolj bele:
Az unsigned int 4,294,967,295-ig tudja a számokat ábrázolni, 0-tól kezdve, negatív nélkül, az int pedig 2,147,483,647-ig, szóval ebben nem nagyon tudod megcsinálni.
N-darab elemből [a lottószámokból (90)] kiválasztunk K darabot [annyit, amennyit a lottóban meg kell jelölni (5)] a sorrend figyelembe vétele nélkül [nem számít, hogy az első szám 5, vagy 7, vagy 45...], úgy, hogy egy elem csak egyszer szerepelhet [ha 90-ből választasz egyet, már csak 89-ből választhatod ki a következőt, 88-ból a harmadikat, 87-ből a negyediket, 86-ból az ötödiket, így 90*89*88*87*86 lehetőség van, a permutáció elvéhez igazodva]. Ezek alapján 32 bites int-en nem lehet ábrázolni a számot, mert a 90*89*88*87*86 = 5,273,912,160, ami alapján nem fér bele az int, de még az uint hatáskörébe sem. Ezt csak 64 bites int-el lehet megoldani, azaz long-al.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!