Generar números aleatorios sin que se repitan ... en C++

Iniciado por drawiz, 22 Febrero 2011, 00:52 AM

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

drawiz

Hola, foreros!

Estoy iniciándome con este asunto de la programación y me han puesto un ejercicio en el cual me piden lo siguiente:

"Hacer un programa que llene 2 arreglos unidimensionales de 10 elementos con valores aleatorios de 1 a 15. En cada arreglo no puede existir el mismo número repetido, pero si puede existir en el otro arreglo.

Cuando termina de llenar los vectores debe mostrar su contenido uno a la par del otro. Luego deberá sumar los resultados en un tercer arreglo tomando el primer elemento del arreglo 1 y sumarlo con el último elemento del arreglo 2.

Al finalizar la suma de los elementos debe mostrar el resultado del tercer vector."



Pues bien, ya comencé a desarrollar el código para resolver este ejercicio, pero, cuando llego a la parte donde debo comprobrar si un elemento se repite en un arreglo (por el momento solamente he declarado 1 arreglo) ya no sé qué hacer para crear la recursividad que me permita saber si el elemento está o no repetido.

Agradecería mucho si podéis ayudarme a resolver esto. Os dejo el código que he desarrollado hasta el momento.

//Inicia el codigo

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;

int main () {

        int tamanno = 10;
        int arreglo1[tamanno]; //declaro un arreglo de 'tamanno' elementos.
        int contador = 1;
        int aux = 0;

        //Voy a sembrar una 'semilla' para luego usar numeros aleatorios en
        //el arreglo que utilizare posteriormente.
        srand(time(NULL));

        //Esto inicializa en '0' a los elementos del arreglo.

        for ( int i = 0; i < tamanno; i++ ) {
        arreglo1 = (rand() % 10) + 1; //Genera numeros aleatorios entre 0 y 10
        }

        // Aqui deberia haber algo que permita crear una recursion para saber
        // si un elemento del arreglo esta repetido. De ser asi deberia crear
        // otro elemento en esa posicion, comprobar de nuevo si esta repetido
        // y si no lo esta entonces pasar a la siguiente posicion repetiendo
        // esta accion hasta que todos los numeros no esten repetidos.

        //Ahora voy a mostrar el encabezado de donde estara el arreglo.

        cout << "Elemento" << setw(13) << "Valor" << endl;

        cout << "Elemento" << setw(13) << "Valor" << endl;

        //Esta sección de codigo es la que muestra a los elementos del
        //arreglo.
        for ( int i = 0; i < tamanno; i++ )
                cout << setw(7) << i << setw(13) << arreglo1 << endl;

        return 0;


// Finaliza el codigo

Garfield07



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

BlackZeroX

.
puedes traducir este codigo:

http://foro.elhacker.net/programacion_visual_basic/src_crndnumbersnr_generar_numeros_aleatorios_sin_repetir_veryfast-t328967.0.html

El algoritmo es súbitamente rápido ya que no emplea bucles en la creación de números aleatorios.

Dulces Lunas!¡.
.
The Dark Shadow is my passion.

miri_nenyta

NECESITO AYUDA, SOY PRINCIPIANTE EN ESTE TEMA Y NO PUEDO CON UNA TAREA, ME PIDE LO SIGUIENTE:

Diseña un programa que genere números aleatorios entre 0 y 10000 e imprima el valor del número
generado, el programa se debe de ejecutar constantemente ( es decir en forma repetitiva) y se
debe detener, solo cuando el numero generado se encuentre en el rango de (4000 a 6000)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


main()
{
int num,i;

srand(time(NULL));
num=rand()%1;
num=rand()%10000;
printf("Numero aleatorio es: \n", num);
printf("%i\n", num);

HASTA AHI ME DA NUMEROS ALEATORIOS PERO NO LOGRO MAS AYUDA POR FAVOR URGEEEE

Mecanma

perdon por responder a algo muerto. y por el codigo


#include <iostream>
#include <stdlib.h>
#include <time.h>

using std::cout;
using std::endl;

int main(){
const int Max = 10000, Limite =10001;

srand(time(NULL));

int aux;


do{
aux =0 + rand()%(Limite - 0);

if((aux > 4000) && (aux < 6000)){
cout<<"Ultimo: "<<aux<<endl;
return 0;
}
else{
cout<<aux<<endl;
}
}while((aux < 4000) || (aux >6000));



return 0;
}