Números aleatorios sin repetir en C++

Ya hemos visto cómo obtener número aleatorios en c++, pero tarde o temprano surge la necesidad de generar números aleatorios pero sin que se repitan. Podría ser útil para varias cosas como por ejemplo, ordenar de manera aleatoria elementos de una lista, formas grupos aleatorios, barajear cartas, etc. Así que en algoritmo quedaría algo así:

  1. Crear una matriz y dejarla vacía.
  2. Obtener un número aleatorio.
  3. Checar si ese número existe en la matriz. Si si, regresar al paso 2. Si no, guardar el numero en la matriz.

Así que el programa es este:

#include
#include
#include
using namespace std;

bool checkrep(int n, int num[])
{
    for(int i=0; i<10; i++)
        if(n == num[i])
            return true;
    return false;
}

int main()
{
    srand(time(NULL));
    int n, num[10];
    for(int i=0; i<10; i++)
    {
        do
            n = 1 + rand() % 10;
        while(checkrep(n, num));
        num[i] = n;
        cout << num[i] << "  ";
    }
}

Primero que nada, <cstdlib> es la forma correcta de incluir la librería <stdlib.h> en c++, igual con <ctime>.

Como ven, usamos una función bool (que retorna falso o verdadero) para checar si el número aleatorio ya existe en nuestra matriz. Si cualquiera de los números es igual a nuestro número aleatorio n, la función retorna true, por lo que el ciclo do-while desde el cual llamamos la función tendrá que repetirse una vez más y hasta que la función retorne false.

Cuando se logra salir del ciclo do-while, guardamos nuestra n en el lugar de la matriz que corresponda, lo mostramos en pantalla y continuámos con la siguiente posición de la matriz.

Otra cosa. Para decirnos si un número está repetido en la matriz, la función checkrep() necesita obviamente dos cosas, el número aleatorio y la matriz. Así que le enviámos como parámetros nuestra matriz y nuestro número aleatorio.

16 thoughts on “Números aleatorios sin repetir en C++

  1. mi pregunta es acerca de archivos de texto
    char main(){

    pregunta->contenido = “? como puedo hacer que un archivo de registros o renglones, cada renglon se guarde en una linea por separado?”;

    observacion->contenido = “las operaciones de escritura y lectura ya la domino”;

    // NOTA:
    // crees que c++ es adictivo ???

    return “gracias de antemano :)”;
    }

  2. hola me podrian decir como realizo un codigo fuente q me muetre un exponencial , en numero decimal, hexadecimal, y octal ?

  3. Me podrias ayudar?🙂

    bool serepita(int num,int numero[4][4])
    {
    int b,c;
    for (b=0;b<4;b++)
    {for(c=0;c<4;c++)
    {if (num==numero[b][c])
    {return true;
    }
    else
    {return false;
    }
    }
    }
    }

    int main ()
    {
    int i,a,numero[4][4],elnumero;
    srand(time(0));
    for (i=0; i<4; i++)
    {for (a=0;a<4;a++)
    {numero[i][a]=rand()%15;
    }
    }

    for (i=0;i<4;i++)
    {for(a=0;a<4;a++)
    {elnumero=numero[i][a];
    while (serepita(elnumero,numero))
    {numero[i][a]=rand()%15;
    }
    }
    }

    for (i=0;i<4;i++)
    {cout<<" "<<endl;
    for(a=0;a=10)
    {cout<<numero[i][a]<<" ";
    }
    else
    {cout<<numero[i][a]<<" ";
    }
    }
    }
    cout<<endl;

    system("PAUSE");
    }

    Lo que no quiero es que se repitan los numeros en la matriz de 4×4

  4. BUENAS, ME PARECE INTERESANTE LO QUE PUBLICAN PARA AYUDAR A TERCEROS INCLUYENDOME….CHICOS(AS) EN PROGRAMACION NO SOY TAN BUENA PERO MI META AHORA MISMO ES APLICARME PARA APRENDER, ETC…LA COSA ES QUE ESTOY DANDO METODOS NUMERICOS Y BUENO AHI DAMOS C++ O XPROGRAMA PARA MATRICES O BUSCAR SOLUCION DE DICHO PROBLEMA, ME DEJARON UNO PERO LA VERDAD INTENTE HACERLO Y NO ME SALE; ALGUIEN ME PODRA DAR UNA AYUDADITA LO RPONTO POSIBLE SE LO AGRADECERIA MUCHO …;)

    1. Desarrolle un programa que permita sumar los elementos enteros de dos arreglos de una dimensión cada uno y que almacene los resultados en un tercer arreglo. Muestre en pantalla los tres arreglos.
      En el arreglo resultante, busque todos los valores mayores que 15 e imprímalos:

      Ejemplo:
      A B C
      2 7 9
      6 4 10
      8 10 18
      7 + 23 = 30
      3 12 15
      5 18 23
      1 30 31
      4 11 15

      Los números mayores que 15 en el arreglo C son: 18, 30,23,31

      alguien que me ayude xfa🙂

      1. #include
        #include
        #include
        void main()
        {
        int a[15], b[15], c[15], contador, num;
        system(“cls”);
        printf(“Cuantos numeros en cada arreglo quieres poner? “);
        scanf(“%i”,&num);
        for (contador=1;contador<=num;contador++){
        printf("Dame un numero para a");
        scanf("%i",&a[contador]);}
        for (contador=1;contador<=num;contador++){
        printf("Dame un numero para b");
        scanf("%i",&b[contador]);}
        for (contador=1;contador15)
        printf(“n%i”,c[contador]);}
        getch();
        }

        jaja el anterior estaba erróneo

    2. #include
      #include
      #include
      void main()
      {
      int a[15], b[15], c[15], contador, num;
      system(“cls”);
      printf(“Cuantos numeros en cada arreglo quieres poner? “);
      scanf(“%i”,&num);
      for (contador=1;contador<=num;contador++){
      printf("Dame un numero para a");
      scanf("%i",&a[contador]);}
      for (contador=1;contador<=num;contador++){
      printf("Dame un numero para b");
      scanf("%i",&b[contador]);}
      for (contador=1;contador<=num;contador++){
      c[contador]=a[contador]+b[contador];
      printf("n%i",c[contador]);}
      getch();
      }

  5. quiero hacer un programa de numeros aleatorios de 10*10 con una matriz que los valla leyendo cada uno

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s