c# - Probability and Random number generator -
i'm working on problem involves probability , random number generator believe close need hammering out 1 last thing. have marble bag in enter number of marbles of different color. meaning red 10 green 5 blue 5 orange 3. have infer probability of each colored marble, randomly generate number of marbles based on probability. far can calculate probability
int marblecnt = red + green + blue + orange; double probred = (double)red / marblecnt; double probgreen = (double)green / marblecnt; double probblue = (double)blue / marblecnt; double proborange = (double)orange / marblecnt; then plan use random().nextdouble used decipher out marble picked code:
for (int = 0; < 10; i++) { double randnum = mrandom.nextdouble(); if (0 <= randnum && randnum < probred) { probarr[i] = red_marble; } else if (probred <= randnum && randnum < probgreen) { probarr[i] = green_marble; } else if (probgreen <= randnum && randnum < probblue) { probarr[i] = blue_marble; } else { probarr[i] = orange_marble; } } my issue do if have same number of marbles, meaning have 10 red , 5 blue , 5 orange need decipher pick blue or orange.
personally, wouldn't use double @ - i'd pick random integer between 0 (inclusive) , total number of marbles (exclusive). effectively, you'd "labelling" each marble number, , working out marble picked based on random integer. example:
marblecolor pickmarble (random rng, int redcount, int greencount, int bluecount, int orangecount) { int index = rng.next(redcount + greencount + bluecount + orangecount); if (index < redcount) { return marblecolor.red; } if (index < redcount + greencount) { return marblecolor.green; } if (index < redcount + greencount + bluecount) { return marblecolor.blue; } return marblecolor.orange; } this same approach you've got doubles, simpler (imo) understand.
Comments
Post a Comment