2012-06-22 24 views
5

Sto cercando di generare una sequenza numerica in cui ogni numero è compreso tra 70 e 100 ci saranno numeri x nella sequenza e darà e media di y. Come sarebbe questo algoritmo?Generare una sequenza di numeri casuali per ottenere e media

+0

la media dei numeri deve essere esattamente y o solo quando viene eseguita più volte in media? – hackartist

+0

Owe, forse mi manca capito la domanda :-) – 8bitwide

+0

Non avrai una buona risposta finché non ci dirai la distribuzione. Questa è la parte difficile. –

risposta

2

ritengo è impossibile per loro di essere distribuiti uniformemente tra 70 e 100 e hanno una determinata media allo stesso tempo.

Quello che puoi fare è generare numeri casuali che hanno una data media e poi ridimensionarli per adattarli a [70, 100] (ma non saranno distribuiti uniformemente lì).

  1. generare numeri casuali [0..1 (

  2. calcolare la loro media

  3. moltiplicare tutti loro per abbinare la richiesta media

  4. se qualcuno di loro non va bene in [70, 100], ridimensiona tutti di nuovo riducendo la loro distanza da con lo stesso fattore (ciò non modifica la media) x[i] = y + (x[i] - y)*scale

Si finirà con i numeri che sono tutti nell'intervallo [70, 100 (, ma saranno distribuiti uniformemente su un intervallo diverso (ma sovrapposto) centrato su y. Inoltre, questo approccio funziona solo con numeri reali/a virgola mobile. Se vuoi interi, hai un problema combinatorio tra le tue mani.

+0

a destra, non possono essere distribuiti uniformemente. Se y era 72 per esempio allora i numeri tra 70 e 72 devono apparire molto più spesso dei numeri in 72 a 100 per poterli ancora mediamente a 72. – hackartist

+0

che è ancora * possibile * avvenire in una distribuzione uniforme, ma * estremamente * improbabile. La distribuzione uniforme implica che ci sono * no * restrizioni su come vengono scelti i numeri. – Thilo

+0

a proposito: vogliamo interi? Perché se lo facciamo, questo diventa un problema combinatorio. La mia soluzione si applica solo ai numeri reali. – Thilo

0

pitone esempio

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

ma qui vuoi che "avg" esca da un numero fisso specificato in anticipo. – 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

no, parte della domanda era che la media deve essere specificata prima che la mano non venga trovata in seguito. – hackartist

+0

Dang, ho letto male la domanda. Ignorare. –

Problemi correlati