2012-06-22 6 views
5

私は、各数字が70〜100の数字のシーケンスを生成することを考えています。シーケンスにxの数字があり、それはyの平均となります。このアルゴリズムはどのように見えますか?乱数列を生成して平均化する

+0

数字の平均は正確にyでなければならないか、何度実行しても平均してyに何度も出てくるのですか? – hackartist

+0

Owe、おそらく私は質問を理解できません:-) – 8bitwide

+0

あなたが私たちに配布を伝えるまで、あなたは良い答えを得られません。それは難しい部分です。 –

答えて

2

私はそれらが均一に70と100の間に分布することと同時に与えられた平均値を有することが不可能であると思います。

あなたができることは、平均がある乱数を生成し、それを[70、100]に合わせてスケーリングすることです(ただし、そこに一様に分布しません)。

  1. は、乱数[0..1(

  2. それらのいずれかが適合しない場合はそれらの平均

  3. 乗算

    それらのすべてが必要とされる平均

  4. に一致するように計算を生成します[70,100]に、同じファクタでyからの距離を減らすことでそれらのすべてを再びスケールします(これは平均を変更しません)。x[i] = y + (x[i] - y)*scale

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

+0

のように、一様に配布することはできません。 yが72の場合、70と72の間の数値は72〜100の数値よりもはるかに頻繁に現れなければならず、それでも平均72になることがあります。 – hackartist

+0

これは依然として*可能です* *ありそうもない。一様分布とは、数値の選択方法に制限がないことを意味します。ところで – Thilo

+0

:整数が欲しいですか?なぜなら、もしそうしてしまうと、これは組み合わせの問題になるからです。私の解は実数にのみ適用されます。 – Thilo

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 
+0

ここでは、 "avg"を先に指定した固定番号にする必要があります。 – Thilo

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(); 
+1

いいえ、問題の一部は、後で手を見つける前に平均値を指定しなければならないということでした。 – hackartist

+0

ダング、質問を間違えた。無視。 –

関連する問題