Увеличение вероятности выпадения случайного числа - C#
Формулировка задачи:
Здравствуйте.
Есть массив int из ста элементов, который заполнен числами от 0 до 99. По нажатию на кнопку пользователю выводится случайный элемент массива.
Необходимо сделать так, чтобы вероятность выпадения определённого элемента увеличивалась в зависимости от значения этого элемента. Т.е. чтобы число 99 выпадало значительно чаще, а 0 почти не выпадал. При этом рандомность необходимо сохранить, чтобы вероятность выпадения 0 всё же была, да и остальных чисел тоже.
Пример: 95, 99, 89, 99, 90, 57, 98,...N..., 0, 97, 95,...N..., 12, 70, 72, 94....
Как это осуществить? Есть какие-нибудь готовые формулы на такой случай?
Решение задачи: «Увеличение вероятности выпадения случайного числа»
textual
Листинг программы
int n0 = 0;
int n10 = 0;
int n20 = 0;
int n30 = 0;
int n40 = 0;
int n50 = 0;
int n60 = 0;
int n70 = 0;
int n80 = 0;
int n90 = 0;
for (int j = 0; j <= 10000; j++)
{
int[] Arr = new int[100];
int nSumm = 0;
for (int i = 0; i < Arr.Length; i++)
{
Arr[i] = i;
nSumm += i;
}
Random rnd = new Random();
int nRand = rnd.Next(0, nSumm + 1);
for (int i = 0; i < Arr.Length; i++)
{
nRand = nRand - Arr[i];
if (Arr[i] >= nRand)
{
//MessageBox.Show(Arr[i].ToString());
if (Arr[i] >= 0 && Arr[i] < 10)
n0++;
if (Arr[i] >= 10 && Arr[i] < 20)
n10++;
if (Arr[i] >= 20 && Arr[i] < 30)
n20++;
if (Arr[i] >= 30 && Arr[i] < 40)
n30++;
if (Arr[i] >= 40 && Arr[i] < 50)
n40++;
if (Arr[i] >= 50 && Arr[i] < 60)
n50++;
if (Arr[i] >= 60 && Arr[i] < 70)
n60++;
if (Arr[i] >= 70 && Arr[i] < 80)
n70++;
if (Arr[i] >= 80 && Arr[i] < 90)
n80++;
if (Arr[i] >= 90 && Arr[i] < 100)
n90++;
break;
}
}
}
MessageBox.Show(n0.ToString() + "\n" +
n10.ToString() + "\n" +
n20.ToString() + "\n" +
n30.ToString() + "\n" +
n40.ToString() + "\n" +
n50.ToString() + "\n" +
n60.ToString() + "\n" +
n70.ToString() + "\n" +
n80.ToString() + "\n" +
n90.ToString());