5

各数値が 70 から 100 の間である数値シーケンスを生成しようとしています。シーケンスには x の数値があり、y の平均が得られます。このアルゴリズムはどのようになりますか?

4

3 に答える 3

2

それらが 70 から 100 の間で均一に分布し、同時に一定の平均値を持つことは不可能だと思います。

できることは、特定の平均を持つ乱数を生成し、[70, 100] に収まるようにスケーリングすることです (ただし、それらはそこで均一に分散されません)。

  1. 乱数を生成 [0..1(

  2. 平均を計算する

  3. 必要な平均に一致するようにそれらすべてを乗算します

  4. それらのいずれかが [70, 100] に収まらない場合は、それらの距離をy同じ係数だけ減らして、それらすべてを再度スケーリングします (これは平均を変更しません)。x[i] = y + (x[i] - y)*scale

すべて [70, 100(] の範囲内の数値になりますが、それらは y を中心とする異なる (ただし重複する) 間隔に均一に分散されます。また、このアプローチは実数/浮動小数点でのみ機能します。整数が必要な場合は、組み合わせの問題が発生します。

于 2012-06-22T01:35:09.000 に答える
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
于 2012-06-22T01:30:08.307 に答える
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();
于 2012-06-22T01:39:51.870 に答える