Сгенерируйте серию случайных чисел, которые в сумме дают 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

2022-05-19T09:38:02+00:00