Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Generar numeros Random en C#

55 views
Skip to first unread message

Eduardo

unread,
Aug 19, 2008, 1:42:59 PM8/19/08
to
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


RFOG

unread,
Aug 19, 2008, 2:00:01 PM8/19/08
to
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" <edu...@brainland.net> wrote in message
news:OmPF$QiAJH...@TK2MSFTNGP04.phx.gbl...

--
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.
-- Voltaire. (1694-1778) Filósofo y escritor francés.

Harvey Triana

unread,
Aug 19, 2008, 4:29:21 PM8/19/08
to
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" <edu...@brainland.net> escribió en el mensaje
news:OmPF$QiAJH...@TK2MSFTNGP04.phx.gbl...

RFOG

unread,
Aug 20, 2008, 2:48:52 AM8/20/08
to
Tu ve haciéndoles las tareas a los alumnos. :-)

"Harvey Triana" <harvey...@hotmail.com> wrote in message
news:%23C3Bdpj...@TK2MSFTNGP02.phx.gbl...

--

Eduardo

unread,
Aug 20, 2008, 7:59:40 AM8/20/08
to
Harvey Triana pretended :

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


Harvey Triana

unread,
Aug 20, 2008, 10:42:34 AM8/20/08
to
...¿Pasión?

Saludos,

<Harvey Triana />

http://vexpert.mvps.org

"RFOG" <n...@mail.com> escribió en el mensaje
news:OyPUPDpA...@TK2MSFTNGP02.phx.gbl...

RFOG

unread,
Aug 20, 2008, 1:06:42 PM8/20/08
to
:-)
0 new messages