Вопрос по random, algorithm, numbers – Генерация последовательности случайных чисел для получения и усреднения

5

Я пытаюсь сгенерировать последовательность чисел, где каждое число находится в диапазоне от 70 до 100, в последовательности будет х чисел, и оно даст и среднее значение у. Как бы выглядел этот алгоритм?

Дубликат.stackoverflow.com/questions/39435481/… Perennial
тебе нужны целые числа? Thilo
среднее число должно быть ровно y, или только когда пробег много раз выходит к y в среднем? hackartist
Вы не получите хорошего ответа, пока не расскажете нам о распространении. Это сложная часть. John Watts
Owe, возможно, я скучаю понял вопрос :-) 8bitwide

Ваш Ответ

3   ответа
2

Я думаю, что они не могут быть равномерно распределены между 70 и 100 и иметь заданное среднее значение в одно и то же время.

Что вы можете сделать, это сгенерировать случайные числа с заданным средним значением, а затем масштабировать их, чтобы они соответствовали [70, 100] (но они не будут распределяться там равномерно).

  1. generate random numbers [0..1(

  2. calculate their average

  3. multiply all of them to match the required average

  4. if any of them does not fit into [70, 100], scale all of them again by reducing their distance from y by the same factor (this does not change the average). x[i] = y + (x[i] - y)*scale

В итоге вы получите числа, которые находятся в диапазоне [70, 100 (но они будут равномерно распределены по другому (но перекрывающемуся) интервалу с центром в y. Кроме того, этот подход работает только с вещественной / плавающей точкой числа. Если вы хотите целые числа, у вас есть комбинационная проблема в ваших руках.

который до сих порpossible происходить в равномерном распределении, ноextremely навряд ли. Равномерное распределение подразумевает, что естьno ограничения на то, как выбираются цифры.
верно, они не могут быть равномерно распределены. Например, если у было 72, то числа от 70 до 72 должны появляться намного чаще, чем числа от 72 до 100, чтобы они по-прежнему составляли в среднем 72.
кстати: мы хотим целые числа? Потому что, если мы это сделаем, это станет комбинаторной проблемой. Мое решение применимо только для реальных чисел.
0
        Random r = new Random();
        List<int> l = new List<int>();
        Console.Write("Please enter amount of randoms ");
        int num = (int)Console.Read();
        for (int i = 0; i < num; i++)
        {
            l.Add(r.Next(0, 30) + 70);
        }

        //calculate avg
        int sum = 0;
        foreach (int i in l)
        {
            sum += i;
        }

        Console.Write("The average of " + num + " random numbers is " + (sum / num));

        //to stop the program from closing automatically
        Console.ReadKey();
Черт, неправильно прочитал вопрос. Игнорирование.
нет, часть вопроса заключалась в том, что среднее значение должно быть указано до того, как рука не будет найдена впоследствии.
0

Пример Python

import random
import time

x     = 10
total = 0
avg   = 0


random.seed(time.time())
for x in range(10):
    total += random.randint(70,100)

avg = total /x

print "total: ", total
print "avg: ", avg
но здесь вы хотите & quot; avg & quot; выйти на фиксированный номер, указанный заранее.

Похожие вопросы