I have to pick an element from an ascending array. Smaller elements are considered better. So if I pick an element from the beginning of the array it’s considered a better choice. But at the same time I don’t want the choice to be deterministic and always the same element. So I’m looking for
a random numbers generator that produces numbers in range [0, n], but
the smaller the number is, the more chance of it being produced.
This came to my mind:
num = n;
while(/*the more iteration the more chance for smaller numbers*/)
num = rand()%num;
I was wondering if anyone had a better solution.
I did look at some similar questions but they have details about random number generation generally. I’m looking for a solution to this specific type of random number generation, either an algorithm or a library that provides it.
Generate a Random number, say
x, between[0,n)and then generate another Random floating point number, sayy, between[0,1]. Then raise x to the power of y and use floor function, you’ll get your number.Update: Here are some sample results of calling the above function 10 times, with n = 10, 20 and 30.