Duda Numeros aletorios de la loteria.

Iniciado por pedro_75, 25 Noviembre 2014, 23:50 PM

0 Miembros y 2 Visitantes están viendo este tema.

pedro_75

Hola buenas tardes.

En principio quiero hacer un programa que genere los numeros aletorios de la superonce, les explicare en que consiste.

El Super Once es un juego de lotería de la ONCE formado por una matriz de 80 números, numerados del 1 al 80, y consiste en elegir entre 5 y 11 números de la matriz siendo su orden indiferente.

Previa celebración de un sorteo se obtendrá una combinación ganadora formada por 20 números de los 80.

Una apuesta está integrada por una combinación de números de entre las aceptadas en el producto más el precio pagado para dicha combinación. Existen 7 tipos de apuestas en función de la cantidad de números elegidos, 11, 10, 9, 8, 7, 6 ó 5. Con estos elementos se podrá optar a los premios que correspondan, en función del al tipo de apuesta, el importe en euros apostado y el número de aciertos obtenidos.




A continuación, les explicare mis dudas y planteamiento de como hacerlo

1 Los numeros estan divididos estan divididos en 8 Filas en la primera Fila esta en el rango del 1 al 10, la segunda fila del 11 al 20... Para hacer esto tengo pensando en un bucle for, con 8 variables (1 cada fila), en el se genera un numero aletorio y pasarle el valor a la variable segun el valor del incremento.

Me explico de una manera mas sencilla, Tengo 8 variables cada una representa la cantidad de numeros que habrá y pasariamos el valor generado a cada variable es decir si tenemos la variable fila1 le pasaremos el primer valor generado, el segundo valor genereda se lo pasamos a la variable fila2 asi sucesivamente hasta la octava variable.

2 Ya descrito la cantidad de numeros en cada fila, es hora de crear los numeros mi pensamiento es crear 8 bucles for y se paren con el valor de la fila, si en la primera fila es 3 se generaran 3 numeros del 1 al 10.

2.1 El programa puede generar numeros repetidos ¿ Como es posible solucionarlo?

Este es un ejemplo con una sola Fila.

Código (java) [Seleccionar]
/**
*
* @author pedro_75
*/


class numerosaletorios {
   
public static void main(String[] args) {
       
       double rango;
       int numeroentero,Fila1=3;    // Este valor lo he escogido yo pero en el programa  habra un bucle que nos generara los
                                                // valores de las filas
   
       
for (int i=0; i<Fila1; i++){
       
         rango = (Math.random()*(10)+1);
         numeroentero = (int) rango; // en nuestro programa solo nos interesan los numeros enteros no decimales                                      
         System.out.println(numeroentero);
         
       }
   }
}
             


3 Existe una base de datos, con los resultados de la superonce como podria hacer un metodo o clase en el que recogiera esos datos comprobara uno por uno las posibilidades de que pueda salir.




4 Con mis estatidisticas y posibilidades,  ¿como puedo modificar la clase Random para que pueda salir mas por ejemplo el 2 que el 5 segun las posibilidades?








Saberuneko

#1
Hmm... respondiéndote a las partes 1 y 2.

Te recomendaría trabajar con arrays.

A la hora de generar números, verifica si hay duplicados recorriendo el array antes de añadir el nuevo valor.

No tires de variables del tipo fila1, fila2, fila3... En vez de eso hazte un array fila[posición] y recórrelo con un único bucle for que te rellene el array de una tirada.

Similar a esto:
Código (java) [Seleccionar]
int fila[7];
Random rand = new Random();
for(int i=0; i<fila.size(); i++)
{
...
fila[i] = (rand.nextInt((10)+1));
...
}


Para comprobar duplicados, algo del palo:
Código (java) [Seleccionar]
public boolean comprobarDuplicados(int valor)
{
duplicado=false;
for(int i=0; i<fila.size(); i++)
{
if(fila[i]==valor)
duplicado=true;
}
return duplicado;
}


ALTERNATIVAMENTE, y mucho más práctico, utiliza un HashSet. (No admiten duplicados).

HashSet (Java Platform SE7):
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html


Sobre la parte 4, yo suelo hacerlo "extendiendo" el random con condicionales y valores más altos.

Por ejemplo, generamos valores del 0 al 9, pero me interesa que salga más el 9, por decir algo.
Pasos que yo seguiría:

1.- Generar un aleatorio de 0 a 100.
2.- Asignar una parte proporcional de probabilidad a cada número con condicionales.
2.1.- Las condicionales asignarán el valor adecuado.

Ejemplo:

Quiero un 20% de posibilidades para un 9, el resto con probabilidades normales.
Si el valor aleatorio me sale entre 81 y 100, asigno el 9.
Los otros valores se reparten el resto de forma equitativa. (Approx 8).

Código (java) [Seleccionar]
if(value >= 81 && value < 100)
  value = 9;
else
  value = value/9


Así salen más nueves que otros números.

pedro_75

Gracias por responderme saburenko, me has solucionado muchas dudas que tenia! me pondre a ello enseguida