Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alejandro70 en 27 Julio 2015, 05:19 am



Título: Función rand sin repeticiones
Publicado por: alejandro70 en 27 Julio 2015, 05:19 am
Que tal chic@s del foro, pues supongo que asunto lo explica todo, quiero hacer que la funcion rand me de valores del 0 a x número al azar pero sin repetir ninguno, además quiero usar una semilla diferente usando srand(int i), pero no srand(time(0)).
Gracias por la ayuda   ;-)


Título: Re: Función rand sin repeticiones
Publicado por: simorg en 27 Julio 2015, 05:26 am
Citar
quiero hacer que.............

Pues hazlo....aquí no lo haran por tí.

Publica tu codigo y pregunta las dificultades que tengas.


Saludos.


Título: Re: Función rand sin repeticiones
Publicado por: alejandro70 en 27 Julio 2015, 22:13 pm
Si claro perdon   :¬¬
Aun asi ya lo resolví. En cuanto vuelva a prender la pc subo el código.



Bueno el codigo es el siguiente:

Código:
  void random(int vector[28]){

int i, j, repeticion, n;

for(i=0;i<=27;i++){
n=rand() % 28;
repeticion=0;

for(j=0;j<=i;j++){

if(n==vector[j]){
repeticion=1;
break;
}
}

if(repeticion==1){
i--;
}else{
vector[i]=n;
}
}
}

Bueno el vector que se le pasa en forma de parametro es solo para almacenar los numeros al azar.


Título: Re: Función rand sin repeticiones
Publicado por: do-while en 29 Julio 2015, 09:37 am
¡Buenas!

¡Ese código es muy ineficiente!

Cuantos más elementos hayas obtenido más difícil será que rand te devuelva un elemento no repetido.

En este caso sería mucho más eficiente hacer lo siguiente:

Para i ente 0 y MAX - 1
    n = aleatorio (0, MAX - 1);

    si(i != n)
       intercambiar(v(i),v(n));
    fin si
Fin Para

En MAX iteraciones tienes un vector reordenado de forma aleatoria.

¡Saludos!