Función rand sin repeticiones

Iniciado por alejandro70, 27 Julio 2015, 05:19 AM

0 Miembros y 1 Visitante están viendo este tema.

alejandro70

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   ;-)

simorg

Citarquiero hacer que.............

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

Publica tu codigo y pregunta las dificultades que tengas.


Saludos.

alejandro70

#2
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:

  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.

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!