repetir numeros numero mostrar generar funcion ejemplo digitos decimales cifras aleatorios aleatorio c# random probability

c# - numeros - Probabilidad de generador de números aleatorios



int aleatorio c# (3)

Puede definir la matriz de distribución (pseudocódigo):

// distribución justa

array = {0.1666, 0.1666, 0.1666, 0.1666, 0.1666, 0.1666 };

luego tira los dados de 0 a 1, guarda en x y luego haz

float sum = 0; for (int i = 0; i < 6;i++) { sum += array[i]; if (sum > x) break; }

i es el número de dados.

Ahora si quieres hacer trampa cambia la matriz a:

array = {0.1, 0.1, 0.1, 0.1, 0.1, 0.5 };

y tendrás un 50% para obtener 6 (en lugar de 16%)

Digamos que estoy escribiendo un juego de suerte simple: cada jugador presiona Enter y el juego le asigna un número aleatorio entre 1-6. Al igual que un cubo. Al final del juego, el jugador con el número más alto gana.

Ahora, digamos que soy un tramposo. Quiero escribir el juego para que el jugador # 1 (que soy yo) tenga una probabilidad del 90% de obtener seis, y el 2% de obtener cada uno de los números restantes (1, 2, 3, 4, 5).

¿Cómo puedo generar un número al azar y establecer la probabilidad para cada número?


Tienes algunas opciones, pero una forma sería sacar un número entre 1 y 100, y usar tus pesos para asignarlo a un número de cara de dado.

Asi que

1,2 = 1 3,4 = 2 5,6 = 3 7,8 = 4 9,10 = 5 11-100 = 6

esto le daría las proporciones que necesita, y también sería bastante fácil de ajustar más tarde.


static Random random = new Random(); static int CheatToWin() { if (random.NextDouble() < 0.9) return 6; return random.Next(1, 6); }

Otra forma personalizable de hacer trampa:

static int IfYouAintCheatinYouAintTryin() { List<Tuple<double, int>> iAlwaysWin = new List<Tuple<double, int>>(); iAlwaysWin.Add(new Tuple<double, int>(0.02, 1)); iAlwaysWin.Add(new Tuple<double, int>(0.04, 2)); iAlwaysWin.Add(new Tuple<double, int>(0.06, 3)); iAlwaysWin.Add(new Tuple<double, int>(0.08, 4)); iAlwaysWin.Add(new Tuple<double, int>(0.10, 5)); iAlwaysWin.Add(new Tuple<double, int>(1.00, 6)); double realRoll = random.NextDouble(); // same random object as before foreach (var cheater in iAlwaysWin) { if (cheater.Item1 > realRoll) return cheater.Item2; } return 6; }