Generar numeros Random en C#

19/08/2008 - 19:42 por Eduardo | Informe spam
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno
repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo

Preguntas similare

Leer las respuestas

#1 RFOG
19/08/2008 - 20:00 | Informe spam
Lo que quieres no es generar números aleatorios, sino desordenar un listado
de números.

Create un array del cero al 49, llénalo con los números del 1 al 50 y luego
echa los dados sacando dos valores entre 0 y 49 e intercambiando la posición
entre ambos. En teoría, cuando lo hayas hecho 50 veces, el array estará
desordenado.

De la manera que quieres hacerlo es demasiado lento: debes descartar los
números que han salido, y cuando lleves muchos, cada vez irá más lento.

"Eduardo" wrote in message
news:OmPF$
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo





Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Proclamo en voz alta la libertad de pensamiento y muera el que no piense
como yo.
Respuesta Responder a este mensaje
#2 Harvey Triana
19/08/2008 - 22:29 | Informe spam
Un "approach" eficiente. El mensaje (MessageBox) es para ilustración del
algorítmo:
// Valido para Size entre 1 y 999
// Size: Tamaño de la serie
// RestultCount: Tamaño de la serie devuelta, <= Size
public void RandomizeSerie(int Size, int RestultCount)
{// by Harvey Triana
StringBuilder ScanString = new StringBuilder();
string s;
for (int i = 1; i <= Size; i++) ScanString.Append(i.ToString("000"));
s = ScanString.ToString();
// randomizing
Random rnd = new Random((int)DateTime.Now.Ticks);
int j;
int r; // result
for (int i = 1; i <= RestultCount; i++)
{
j = 1;
while (!((j % 3) == 0)) j = rnd.Next(0, s.Length);
r = int.Parse(s.Substring(j, 3));
s = s.Remove(j, 3);
MessageBox.Show(string.Format("i={0} j={1} r={2} ... s={3}", i, j,
r, s));
}
}

Usa:
RandomizeSerie(50,20);

"Eduardo" escribió en el mensaje
news:OmPF$
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo


Respuesta Responder a este mensaje
#3 RFOG
20/08/2008 - 08:48 | Informe spam
Tu ve haciéndoles las tareas a los alumnos. :-)

"Harvey Triana" wrote in message
news:%
Un "approach" eficiente. El mensaje (MessageBox) es para ilustración del
algorítmo:
// Valido para Size entre 1 y 999
// Size: Tamaño de la serie
// RestultCount: Tamaño de la serie devuelta, <= Size
public void RandomizeSerie(int Size, int RestultCount)
{// by Harvey Triana
StringBuilder ScanString = new StringBuilder();
string s;
for (int i = 1; i <= Size; i++) ScanString.Append(i.ToString("000"));
s = ScanString.ToString();
// randomizing
Random rnd = new Random((int)DateTime.Now.Ticks);
int j;
int r; // result
for (int i = 1; i <= RestultCount; i++)
{
j = 1;
while (!((j % 3) == 0)) j = rnd.Next(0, s.Length);
r = int.Parse(s.Substring(j, 3));
s = s.Remove(j, 3);
MessageBox.Show(string.Format("i={0} j={1} r={2} ... s={3}", i, j,
r, s));
}
}

Usa:
RandomizeSerie(50,20);

"Eduardo" escribió en el mensaje
news:OmPF$
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno
repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo









Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Proclamo en voz alta la libertad de pensamiento y muera el que no piense
como yo.
Respuesta Responder a este mensaje
#4 Eduardo
20/08/2008 - 13:59 | Informe spam
Harvey Triana pretended :
Un "approach" eficiente. El mensaje (MessageBox) es para ilustración del
algorítmo:
// Valido para Size entre 1 y 999
// Size: Tamaño de la serie
// RestultCount: Tamaño de la serie devuelta, <= Size
public void RandomizeSerie(int Size, int RestultCount)
{// by Harvey Triana
StringBuilder ScanString = new StringBuilder();
string s;
for (int i = 1; i <= Size; i++) ScanString.Append(i.ToString("000"));
s = ScanString.ToString();
// randomizing
Random rnd = new Random((int)DateTime.Now.Ticks);
int j;
int r; // result
for (int i = 1; i <= RestultCount; i++)
{
j = 1;
while (!((j % 3) == 0)) j = rnd.Next(0, s.Length);
r = int.Parse(s.Substring(j, 3));
s = s.Remove(j, 3);
MessageBox.Show(string.Format("i={0} j={1} r={2} ... s={3}", i, j, r,
s));
}
}

Usa:
RandomizeSerie(50,20);

"Eduardo" escribió en el mensaje
news:OmPF$
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo







Muchas gracias Harvey,
La verdad es que el ejemplo tuyo ha sido muy clarificador y enseñando
al que no sabe
Además me ahorrado el ir a las Vegas a tirar los dados

Saludos

Eduardo
Respuesta Responder a este mensaje
#5 Harvey Triana
20/08/2008 - 16:42 | Informe spam
...¿Pasión?



Saludos,

<Harvey Triana />

http://vexpert.mvps.org





"RFOG" escribió en el mensaje
news:
Tu ve haciéndoles las tareas a los alumnos. :-)

"Harvey Triana" wrote in message
news:%
Un "approach" eficiente. El mensaje (MessageBox) es para ilustración del
algorítmo:
// Valido para Size entre 1 y 999
// Size: Tamaño de la serie
// RestultCount: Tamaño de la serie devuelta, <= Size
public void RandomizeSerie(int Size, int RestultCount)
{// by Harvey Triana
StringBuilder ScanString = new StringBuilder();
string s;
for (int i = 1; i <= Size; i++) ScanString.Append(i.ToString("000"));
s = ScanString.ToString();
// randomizing
Random rnd = new Random((int)DateTime.Now.Ticks);
int j;
int r; // result
for (int i = 1; i <= RestultCount; i++)
{
j = 1;
while (!((j % 3) == 0)) j = rnd.Next(0, s.Length);
r = int.Parse(s.Substring(j, 3));
s = s.Remove(j, 3);
MessageBox.Show(string.Format("i={0} j={1} r={2} ... s={3}", i, j,
r, s));
}
}

Usa:
RandomizeSerie(50,20);

"Eduardo" escribió en el mensaje
news:OmPF$
Hola a todos,
Necesito generar de un grupo de 50 numeros, 20 números que no sean
repetidos, lo he intentado con Random pero me repite valores.
Como puedo hacerlo de tal manera que pueda escoger de un grupo de 50
numeros comprendidos entre 1 y 50, 20 números que no haya ninguno
repetido
Estoy trabajando con visual Studio 2008 y C#

Saludos

Eduardo









Microsoft Visual C++ MVP
==> Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
> Proclamo en voz alta la libertad de pensamiento y muera el que no piense
como yo.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida