elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa que genera números aleatorios sin repetir en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa que genera números aleatorios sin repetir en C++  (Leído 31,968 veces)
UmbraNoche

Desconectado Desconectado

Mensajes: 11


Persevera y Triunfarás


Ver Perfil
Programa que genera números aleatorios sin repetir en C++
« en: 21 Enero 2015, 01:27 am »

Buenas gente aquí les dejo un programa que hice traveseando un poco el código para generar números aleatorios sin que se repitan. Si tienen sugerencias de cómo hacerlo más eficiente por favor no duden en comentar, soy nuevo en esto de la programación y cualquier sugerencia será bienvenida.


Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9.    int arreglo[10];
  10.    int aux = 0;
  11.  
  12.    srand(time(0));
  13.  
  14.    for(int i = 0; i < 10; i++){
  15.        aux = (1 + rand() % 15);
  16.  
  17.        int aux2 = 0;
  18.  
  19.        while(aux2 < i){
  20.  
  21.            if(aux != arreglo[aux2])
  22.                aux2++;
  23.  
  24.            else{
  25.                    aux = (1 + rand() % 15);
  26.                    aux2 = 0;
  27.  
  28.                }
  29.        }
  30.  
  31.        arreglo[i] = aux;
  32.  
  33.        cout << arreglo[i] << "\n";
  34.    }
  35.  
  36.    return 0;
  37. }
  38.  


« Última modificación: 21 Enero 2015, 02:11 am por UmbraNoche » En línea

"Si tienes un sueño entonces aferrate a el con constancia, sacrificio y dedicación".
sabeeee

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: Programa que genera números aleatorios sin repetir en C++
« Respuesta #1 en: 26 Enero 2015, 01:27 am »

Yo lo haría para números mas grandes, esa seria mi sugerencia, yo también soy nuevo y no te hago esto ni a palos  ;-) :laugh:.


En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa que genera números aleatorios sin repetir en C++
« Respuesta #2 en: 26 Enero 2015, 17:20 pm »

La eficiencia es un término que suele ser complicado de acotar. Te pongo algunas notas genéricas:

* La eficiencia se mide únicamente por tiempo, por consumo de memoria o por un equilibrio entre ambos?

* Depende del número de elementos a manejar. El algoritmo más eficiente para una población pequeña suele ser diferente del más eficiente para una población grande.

* Depende de los requisitos de la aplicación

* Depende de la arquitectura de la máquina sobre la que funciona el algoritmo.

A modo de ejemplo, para rellenar un vector de 10 elementos no vas a notar ninguna diferencia entre usar un algoritmo super optimizado y el que tienes ya hecho... si en vez de 10 elementos quieres conseguir, no se, 5.000 millones de números pues ya la cosa cambia ( nota que ya no te valdría el tipo int ).

No se, si tu idea es conseguir una colección de 10 números únicos partiendo de un grupo inicial de 15 números podrías probar a crear primero un array con los 15 números y a sacar 10 números al azar... o también puedes desordenar esa colección de 15 números y quedarte únicamente con los 10 primeros:

Código
  1. const int PopulationSize = 20;
  2. const int ArraySize = 19;
  3.  
  4. int main(){
  5.  
  6.  int population[ PopulationSize ];
  7.  for ( int i=0; i < PopulationSize; i++ )
  8.    population[ i ] = i+1;
  9.  
  10.   int arreglo[ ArraySize ];
  11.  
  12.   srand(time(0));
  13.  
  14.   for(int i = 0; i < PopulationSize; i++)
  15.   {
  16.     int j = rand() % PopulationSize;
  17.  
  18.     if ( i == j )
  19.       j = ( i + 1 ) % PopulationSize;
  20.  
  21.     std::swap( population[i], population[j]);
  22.   }
  23.  
  24.   for ( int i = 0; i < ArraySize; ++i )
  25.   {
  26.     arreglo[ i ] = population[ i ];
  27.     std::cout << arreglo[ i ] << std::endl;
  28.   }
  29.  
  30.   return 0;
  31. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines