Сгенерируйте серию случайных чисел, которые в сумме дают N в c #
Проблема в том, что мы хотим, чтобы random-number все числа были ограничены csharp 1-9 и в сумме были равны N. Поэтому visual-c# мы должны генерировать каждое random-number-generator число одно за другим и определять random-number-generator реальные границы для следующего dot-net числа.
Это, конечно, приведет csharp к статистической погрешности dotnet ближе к концу списка, поэтому c#.net я рекомендую перетасовать random массив один раз после генерации.
Чтобы c# определить границы следующего random-number числа, выполните следующие prng действия: Верхняя граница .net = возьмите оставшуюся сумму dot-net минус (количество оставшихся rand элементов * мин). Нижняя c-sharp граница = возьмите оставшуюся random сумму за вычетом (количество c# оставшихся элементов * максимум).
Что-то dotnet вроде (не проверено):
public static List RandomList(int digitMin, int digitMax,
int targetSum, int numDigits)
{
List ret = new List(numDigits);
Random random = new Random();
int localMin, localMax, nextDigit;
int remainingSum = targetSum;
for(int i=1; i<=numDigits; i++)
{
localMax = remainingSum - ((numDigits - i) * min);
if(localMax > max)
localMax = max;
localMin = remainingSum - ((length - i) * max);
if(localMin > min)
localMin = min;
nextDigit = random.Next(localMin, localMax);
ret.Add(nextDigit);
remainingSum -= nextDigit;
}
return ret;
}
Идея random-sample заключается в том, что по random мере того, как вы генерируете .net числа, диапазон возможных dotnet значений для оставшихся чисел dot-net становится меньше, как функция rand ограничения, обнуляющая целевую rand сумму. Вроде.
Изменить: мне random-number-generator пришлось изменить цикл for .net-framework на 1, потому что мы хотим, чтобы .cs-file количество элементов осталось dot-net ПОСЛЕ создания этого.
Edit2: поместите dot-net его в метод для полноты и random измените length
на numDigits
для удобства random-sample чтения.
c#
.net
random
Сгенерируйте серию случайных чисел, которые в сумме дают N в c #
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.